上一节已生成了表结构和数据库同步,本章就开始编写接口。
定义传参模型
首先在schemas目录中新建一个user.py文件,定义接口需要传的参数。代码如下:
from pydantic import BaseModel, EmailStr
class UsersSchemas(BaseModel):
mobile: str
username: str
password: str
mailbox: EmailStr
数据交互处理
其次在crud目录中新建crud_user.py文件,主要是处理和数据表的数据交互,代码如下:
from sqlalchemy.orm import Session
from sqlalchemy import (
select,
and_,
or_
)
from src.app.schemas.user import UsersLogin
from src.app.schemas.user import UsersSchemas
from src.app.models.models_user import User as u
from src.app.cabinet.verification import VerificationData
__all__ = [
"UsersCrud"
]
class UsersCrud:
def __init__(self, *, session: Session) -> None:
self.db = session
def register_user(self, user: UsersSchemas):
"""
注册接口数据和数据库交互
@param :
@return :
"""
try:
# 验证手机号格式是否规范
if not VerificationData.verification(mobile=user.mobile):
raise Exception("手机号码格式不正确...")
# 验证账号长度
if not VerificationData.verification_lenth(var=user.username):
raise Exception("账号长度为5-15个字符...")
# 验证密码长度
if not VerificationData.verification_lenth(var=user.password, max_len=25):
raise Exception("密码长度为5-25个字符...")
# 验证邮箱格式是否规范
if not VerificationData.verification_email(email=user.mailbox):
raise Exception("邮箱格式不正确...")
# 首先查询手机号或者账号是否重复
results = self.db.execute(
select(u.mobile, u.username).where(
or_(
u.mobile == user.mobile,
u.username == user.username
)
)
)
if results.scalars().first():
raise Exception("账号或手机号重复...")
# 接收到数据并赋值给users_info
users_info = u(
mobile=user.mobile, username=user.username,
password=user.password, mailbox=user.mailbox
)
# 往数据库添加数据
self.db.add(users_info)
# 往数据库提交数据
self.db.commit()
# 刷新提交的数据
self.db.refresh(users_info)
# 查询新注册的账号信息
update_results = self.db.execute(
select(u.id, u.mobile, u.username, u.mailbox).where(
and_(
u.mobile == user.mobile,
u.username == user.username
)
)
).first()
return update_results
except Exception as exc:
raise exc
接口定义并启动服务
然后在routers目录中新建一个v_api目录(自行定义名称),在v_api目录中新建api_users.py文件,主要是定义接口的路由和数据的接口,代码如下:
from fastapi import APIRouter
from fastapi import Depends
from sqlalchemy.orm import Session
from src.app.crud.crud_user import UsersCrud
from src.app.core.db.session import session
from src.app.schemas.user import UsersSchemas
from src.app.core.code_response import CodeResponse
from src.app.core.base_redis import redis_client
router = APIRouter(
prefix="/users"
)
@router.post("/register")
async def user_register(users: UsersSchemas, db: Session = Depends(session)):
"""
注册接口
@param :
@return :
"""
try:
response = UsersCrud(session=db).register_user(user=users)
return CodeResponse.succeed(data=response)
except Exception as exc:
return CodeResponse.defeated(err_msg=str(exc.args[0]))
再然后在v_api目录中新建一个api_router.py,用于汇集接口的引包,具体代码如下:
from fastapi import APIRouter
from src.app.routers.v_api import api_users
api_router = APIRouter()
api_router.include_router(router=api_users.router, tags=["用户模块接口"])
最后再进入根目录下main.py文件中,写入我们启动代码,具体代码如下:
import uvicorn
from fastapi import FastAPI
from src.app.routers.api_router import api_router
app = FastAPI()
app.include_router(router=api_router)
if __name__ == "__main__":
uvicorn.run(app="src.main:app", reload=True)
至此,第一个接口已经完成,可自行测试一下是否成功,当然我是已经测试过的,后续接口还可以继续优化,继续加油吧!
最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。