pythonweb框架fastapi示例
时间: 2023-09-02 19:15:45 浏览: 195
下面是一个使用 FastAPI 框架的 Python Web 应用的示例:
```python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
```
上面的代码实现了一个简单的 Web 应用,当用户请求根路径时,会返回一个 JSON 格式的响应,其中包含了 "message" 键和 "Hello World" 值。
可以使用以下命令运行应用:
```
uvicorn main:app --reload
```
其中,"main" 是 Python 文件名,"app" 是 FastAPI 实例对象的名称。" --reload" 参数表示在修改代码后自动重载应用。
相关问题
python web框架fastapi或者django,搭建一个web应用的demo。
FastAPI是一个高性能的Python web框架,使用异步编程方式,提供简洁的API设计,而Django是一个功能丰富的全栈式web框架,适合构建复杂的web应用。接下来我将为你介绍使用FastAPI和Django搭建一个web应用的demo。
首先,我们来看FastAPI的demo应用。在开始之前,我们需要安装FastAPI和相应的依赖,可以使用pip或conda进行安装。在项目目录下创建一个main.py文件,编写以下代码:
```python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
```
以上代码创建了一个FastAPI应用,通过访问根路径可以返回一个Hello World的消息,而通过访问/items/{item_id}路径可以返回传入的item_id和查询参数q。运行应用,使用uvicorn运行工具可以启动应用:
```
uvicorn main:app --reload
```
然后在浏览器访问http://localhost:8000/和http://localhost:8000/items/1?q=test就可以看到相应的返回结果了。
接下来,让我们来看Django的demo应用。同样需要先安装Django。在项目目录下创建一个demo目录用于存放相关代码。进入demo目录后,在命令行中运行以下命令创建一个Django项目:
```
django-admin startproject project_name
```
创建完项目后,在project_name目录下找到settings.py文件,修改其中的ALLOWED_HOSTS添加本机IP地址。
接着,在project_name目录下,运行以下命令创建一个app:
```
python manage.py startapp app_name
```
在app_name目录下找到views.py文件,编写以下代码:
```python
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, World!")
```
然后,在project_name目录下的urls.py文件中导入app_name中的views,编写以下代码:
```python
from django.urls import path
from app_name import views
urlpatterns = [
path('', views.index, name='index'),
]
```
接下来,在命令行中运行以下命令启动项目:
```
python manage.py runserver
```
然后在浏览器访问http://localhost:8000/就可以看到Hello, World!了。
以上就是使用FastAPI和Django搭建一个web应用的demo的示例。两个框架各有优势,可以根据自己的需求选择适合的框架进行开发。
write a python picture gallery fastapi
在Python中创建一个快速API图片画廊,我们可以使用FastAPI作为Web框架,Uvicorn作为服务器,以及像`Pillow`库处理图像,`pathlib`管理文件路径,`sqlite3`存储图片信息。以下是一个简单的示例:
首先安装所需的库:
```bash
pip install fastapi uvicorn pillow sqlalchemy
```
然后创建一个`main.py`文件,包含以下几个部分:
```python
from fastapi import FastAPI, File, UploadFile
import os
from PIL import Image
from io import BytesIO
from starlette.responses import StreamingResponse
from sqlalchemy import create_engine, Column, Integer, String, Text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 初始化数据库
Base = declarative_base()
engine = create_engine('sqlite:///images_gallery.db')
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 数据模型
class ImageGallery(Base):
__tablename__ = "image_gallery"
id = Column(Integer, primary_key=True)
filename = Column(String, unique=True)
description = Column(Text)
# API配置
app = FastAPI()
@app.on_event("startup")
async def startup():
Base.metadata.create_all(bind=engine)
@app.post("/upload-image/")
async def upload_image(file: UploadFile = File(...)):
# 检查文件类型和大小
if file.content_type not in ["image/jpeg", "image/png"]:
return {"error": "Invalid image format"}
if file.size > 4 * 1024 * 1024: # 限制最大4MB
return {"error": "Image size exceeds limit"}
try:
# 保存图片到临时目录,并获取描述信息
temp_path = await save_temp_image(file.file)
description = await get_description_from_user(temp_path) # 这里假设有一个函数从用户输入获取描述
# 添加到数据库
with SessionLocal() as session:
new_image = ImageGallery(filename=file.filename, description=description)
session.add(new_image)
session.commit()
return {"message": f"Image '{file.filename}' uploaded successfully."}
except Exception as e:
return {"error": str(e)}
async def save_temp_image(image_bytes):
temp_file = BytesIO()
temp_file.write(image_bytes)
temp_file.seek(0)
img = Image.open(temp_file)
temp_path = "temp/" + file.filename
img.save(temp_path)
return temp_path
def get_description_from_user(path): # 这里需要实现一个实际的交互或API请求获取用户描述
# 示例:return input("Please describe the image: ")
pass
@app.get("/{filename}")
async def serve_image(filename: str):
try:
with open(os.path.join("temp", filename), 'rb') as image_file:
response = StreamingResponse(image_file, media_type="image/jpeg")
response.headers["Content-Disposition"] = f"attachment; filename={filename}"
return response
except FileNotFoundError:
return {"error": "Image not found"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
```
这个例子展示了基本的图片上传、存储(暂存于本地),以及根据ID返回图片的功能。注意这只是一个基础模板,实际应用可能需要更完善的错误处理和前端界面。
阅读全文