使用Starlette和数据库构建数据驱动的Web应用程序
发布时间:2024-01-17 01:18:30
Starlette是一个轻量级的异步Python Web框架,适用于构建高性能的数据驱动的Web应用程序。它提供了一组简单而强大的工具和功能,可以轻松地与数据库进行交互。
下面将演示如何使用Starlette和数据库构建一个简单的待办事项清单应用程序。
首先,我们需要安装Starlette和数据库驱动程序(在本例中使用SQLite):
pip install starlette pip install databases pip install pydantic
接下来,我们创建一个名为main.py的文件,并导入所需的库和模块:
from starlette.applications import Starlette from starlette.responses import HTMLResponse, JSONResponse from starlette.routing import Route from databases import Database from pydantic import BaseModel
然后,我们连接到数据库并创建一个待办事项表:
database = Database("sqlite:///todo.db")
class Todo(BaseModel):
id: int
title: str
completed: bool
async def startup():
await database.connect()
query = "CREATE TABLE IF NOT EXISTS todos (id INTEGER PRIMARY KEY, title TEXT, completed BOOLEAN);"
await database.execute(query)
async def shutdown():
await database.disconnect()
async def get_todos():
query = "SELECT * FROM todos;"
result = await database.fetch_all(query)
todos = [Todo(**row) for row in result]
return todos
在上面的代码中,我们创建了一个Todo模型来表示待办事项的属性,然后使用databases库连接到SQLite数据库,并创建了一个todos表。我们还定义了一个get_todos函数,该函数用于从数据库中检索所有待办事项。
接下来,我们需要定义一些路由来处理HTTP请求:
async def home(request):
return HTMLResponse("""
<html>
<head>
<title>Todo List</title>
</head>
<body>
<h1>Todo List</h1>
<ul>
{todos}
</ul>
</body>
</html>
""")
async def todos(request):
todos = await get_todos()
return JSONResponse([todo.dict() for todo in todos])
async def add_todo(request):
todo = await request.json()
query = "INSERT INTO todos (title, completed) VALUES (:title, :completed);"
values = {"title": todo["title"], "completed": todo["completed"]}
await database.execute(query, values)
return JSONResponse({"message": "Todo added successfully"})
app = Starlette(routes=[
Route("/", endpoint=home),
Route("/todos", endpoint=todos),
Route("/add_todo", endpoint=add_todo, methods=["POST"]),
], on_startup=[startup], on_shutdown=[shutdown])
在上面的代码中,我们定义了三个路由:home用于返回待办事项清单的HTML页面,todos用于返回所有待办事项的JSON响应,add_todo用于将待办事项添加到数据库中。
最后,我们启动应用程序:
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="localhost", port=8000)
完成以上步骤后,我们就可以运行应用程序,并使用curl或浏览器访问http://localhost:8000来测试应用程序。
使用curl发送POST请求来添加一个待办事项:
curl -X POST -H "Content-Type: application/json" -d '{"title": "Buy milk", "completed": false}' http://localhost:8000/add_todo
使用curl或浏览器访问http://localhost:8000/todos来获取所有待办事项的列表。
这只是一个简单的示例,演示了如何使用Starlette和数据库构建数据驱动的Web应用程序。您可以根据自己的需求扩展和定制此示例。
