fastapi 构建一个项目。网页录入账户,密码,提交后,后台检测是否正确,正确跳转首页,并记录登陆状态,数据库采用sqlite
时间: 2024-09-09 08:04:04 浏览: 77
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API。使用 FastAPI,你可以用 Python 类型提示轻松定义参数,并自动交互式文档。下面是一个基于 FastAPI 的简单项目示例,用于网页录入账户和密码,提交后后台检测是否正确,并正确跳转首页记录登录状态。我们使用 SQLite 作为数据库。
首先,你需要安装 FastAPI 和相关依赖项:
```bash
pip install fastapi
pip install "uvicorn[standard]"
pip install sqlalchemy
pip install passlib[bcrypt] # 用于密码加密
```
然后,创建一个 Python 文件(例如 `main.py`)并编写以下代码:
```python
from fastapi import FastAPI, Depends, HTTPException, status, Request
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from sqlalchemy.orm import Session
from passlib.context import CryptContext
from datetime import datetime, timedelta
from typing import Optional
from database import Base, engine, SessionLocal, User, Token, TokenData
from jose import JWTError, jwt
from pydantic import BaseModel
# 假设数据库模型和相关操作函数已定义(需用户自己创建)
app = FastAPI()
# 模拟用户数据库中的用户
fake_users_db = {
"johndoe": {
"username": "johndoe",
"hashed_password": "$2b$12$K85Z4HKKw4v1wBCtJc/3cuWJn0y7r2vKwGriPQuyJp3lJ/X9CjYK",
"disabled": False,
}
}
@app.post("/token", response_model=Token)
def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(SessionLocal)):
user = authenticate_user(db, form_data.username, form_data.password)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"},
)
access_token_expires = timedelta(minutes=30)
access_token = create_access_token(
data={"sub": user.username}, expires_delta=access_token_expires
)
return {"access_token": access_token, "token_type": "bearer"}
@app.post("/users/", response_model=User)
def create_user(user: User, db: Session = Depends(SessionLocal)):
# 你的逻辑代码来创建一个新用户
pass
@app.get("/users/me/", response_model=User)
async def read_users_me(current_user: User = Depends(get_current_user)):
return current_user
# 其他 API 端点的定义...
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
```
在上面的代码中,你需要自行定义数据库模型(`User`, `Token`, `TokenData` 等),并且实现 `authenticate_user`, `create_access_token`, `get_current_user`, `database.py` 文件中的函数,这些是用于处理用户验证、令牌创建和获取当前用户的逻辑。同时,`Base` 应该是 SQLAlchemy 的模型基类,用于定义数据库表结构。
此示例代码提供了登录接口 `/token` 用于获取访问令牌,还需要实现具体的用户模型和数据库操作代码。然后你可以使用 `uvicorn` 命令运行你的 FastAPI 应用。
```bash
uvicorn main:app --reload
```
请记得在运行之前创建并初始化 SQLite 数据库:
```python
Base.metadata.create_all(bind=engine)
```
阅读全文