标签:username 用户注册 db 接口 开发 user import password User
在前面我们分析了接口的设计,那么我们现在做接口的开发。
我们先去设计下pydantic用户参数的校验
from pydantic import BaseModel from typing import Optional class UserBase(BaseModel): username: str class UserCreate(UserBase): """ 请求模型验证: username: password: """ password: str role: int jobnum: Optional[int] = None studentnum: Optional[int] = None sex: str = "男" age: int
接着,我们去设计对应的crud,操作对应的数据库。
from sqlalchemy.orm import Session from models.models import * from models.schemas import * def get_user(db: Session, user_id: int): return db.query(User).filter(User.id == user_id,User.status==False).first() # 新建用户 def db_create_user(db: Session, user: UserCreate): roles = db.query(Role).filter(Role.name == user.role).first() db_user = User(**user.dict()) db_user.role=roles.id db.add(db_user) db.commit() # 提交保存到数据库中 db.refresh(db_user) # 刷新 return db_user def get_user_username(db: Session, username: str): return db.query(User).filter(User.username == username,User.status==False).first()
接下来,我们看下注册接口的逻辑
1.校验参数是否合规 2.查询用户名是否存在 3.密码加密 4.保存到数据库
我们根据我们的逻辑去开发我们的接口。
from fastapi import APIRouter, Request from fastapi import Depends, HTTPException, Header from models.crud import * from models.get_db import get_db from jose import JWTError, jwt from passlib.context import CryptContext from config import * from common.jsontools import * from common.logs import logger usersRouter = APIRouter() pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") def verify_password(plain_password, hashed_password): return pwd_context.verify(plain_password, hashed_password) def get_password_hash(password): return pwd_context.hash(password) # 新建用户 @usersRouter.post("/create", tags=["users"]) def create_user(user: UserCreate, db: Session = Depends(get_db)): logger.info("创建用户") if len(user.username)<8 or len(user.username)>16: return reponse(code=100106,message="用户名长度应该是8-16位",data="") if user.age<18: return reponse(code=100103, message="年纪大小不符合", data="") if (user.role == "学生" and user.studentnum is None) or (user.role == "教师" and user.jobnum is None) or ( user.role not in ["教师", '学生']): return reponse(code=100102, message="身份和对应号不匹配", data="") db_crest = get_user_username(db, user.username) if db_crest: return reponse(code=100104, message="用户名重复", data="") try: user.password = get_password_hash(user.password) except Exception as e: logger.exception(e) return reponse(code=100105, data="", message="密码加密失败") try: user=db_create_user(db=db, user=user) logger.success("创建用户成功") return reponse(code=200,data={'user':user.username},message="success") except Exception as e: logger.exception(e) return reponse(code=100101, data="", message="注册失败")
在启动的时候,我们需要在main.py下注册对应的路由。
from fastapi import FastAPI from routers.user import usersRouter app = FastAPI() app.include_router(usersRouter, prefix="/user", tags=['users'])
然后对应的启动的
这样我们就完成了注册的接口的开发。这里的知识点用到了jose,passlib,这里如果不太熟悉,可以查看FastAPI 学习之路(三十)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2
标签:username,用户注册,db,接口,开发,user,import,password,User 来源: https://www.cnblogs.com/leiziv5/p/15730945.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。