持续创作,加速生长!这是我参与「日新计划 6 月更文应战」的第12天,点击检查活动概况
大家好~我是小方,欢迎大家关注笋货测验笔记体完记住俾个like呀
回顾
之前咱们现已把登录、注册接口进行了联调,用户模块还有部分功能暂未开发结束,今天咱们来持续开发~
用户列表接口
首要咱们的后台得有用户展现的页面吧?然后可以对用户进行编辑(设置权限、封禁等…)这儿的话,需求用到一个列表接口,支撑分页、搜索功能、修正用户信息…
老规矩,先来界说一下接口的入参,列表接口这儿我用的是get恳求,直接设置途径参数好了,为什么不必post恳求呢?由于post恳求还得界说一个模型-类便是懒
-
接口入参 列表接口需求鉴权,必须得带上token,可是由于咱们没用到用户数据,所以直接命名为
_: dict= Depends(Auth())
好了 -
接口返参
app/models/base.py
新建一个base列表模型app/routers/user/user_schema.py
新建用户列表返参模型 本来的UserDto
咱们新增id
和create_time
两个字段 -
UserDao逻辑编写
app/curd/user/UserDao.py
新增用户列表逻辑,新增如下:
@classmethod
@record_log
def get_user_infos(cls, page: int=1, limit: int=10, search: str=None) ->(int, DataFactoryUser):
"""获取用户信息列表"""
with Session() as session:
filter_list = []
data = session.query(DataFactoryUser)
if search:
filter_list.append(DataFactoryUser.username.like(f"%{search}%"))
user_infos = data.order_by(asc(DataFactoryUser.id)).filter(*filter_list)
total = user_infos.count()
return total, user_infos.limit(limit).offset((page - 1) * limit).all()
这儿的limit(limit).offset((page - 1) * limit)
是分页的核心代码,大家记住不要写反了,从第几页开始,一页获取多少条数据,如果search
有值时,就对用户名进行模糊搜索过滤,没值就默许不过滤
-
路由函数逻辑编写 这儿直接调用
get_user_infos
办法即可,将总数和用户列表数据传入用户列表模型中 -
终究测验一下
正常获取列表数据
搜索用户名
修正用户信息接口
现在咱们的用户信息只要用户权限和是否冻结才干修正,其他都不允许修正,先来界说入参
- 接口入参
这儿要判别一下权限人物类型,其他就判空完事了~
-
接口出参 这儿的话,直接用
ResponseDto
好了,回来提示信息为修正成功 -
修正用户逻辑编写 首要根据id查询用户,如果查不到就抛出反常,根据传入数据进行修正用户信息
-
路由函数编写
这儿要注意的是,修正用户信息现在就只要管理员才干操作,其他人都不能操作,所以这儿要加上权限控制
权限不足时操作
恳求接口,发现数据库中的某些字段为空的,还记住咱们最初规划表的时候规划了update_code
和update_name
这两个字段,为的是记录xxx修正这条数据,所以这儿咱们得上用这两个字段,那就加上呗
看到这上面的更新操作,其实都字段算是比较少,那如果以后要更新的字段比较多,不便是很多xxx.xxx = xxx
为此,咱们就更新这个操作封装一下,以下代码来自于无敌哥的pity
,无敌哥yyds
新建app/utils/db_utils.py
from datetime import datetime
class DbUtils(object):
@staticmethod
def update_model(dist, source, update_user=None, not_null=False):
"""
:param dist: 表对象
:param source: 更新的数据
:param update_user: 更新人
:param not_null: 是否疏忽更新null
:return:
"""
for var, value in source.items():
if not_null:
if value:
setattr(dist, var, value)
else:
setattr(dist, var, value)
if update_user:
setattr(dist, 'update_code', update_user['id'])
setattr(dist, 'update_name', update_user['username'])
@staticmethod
def delete_model(dist, delete_user=None):
"""
:param dist:
:param delete_user:
:return:
"""
dist.del_flag = 1
dist.update_time = datetime.now()
if delete_user:
dist.update_code = delete_user['id']
dist.update_name = delete_user['username']
update_model
通过传进去的数据,循环进行setattr
,如果not_null=True
就更新字段值,否则不更新,delete_model
默许更新del_flag
和update_time
字段,这个办法暂时用不上,先占个坑~
接着改造update_user
办法
终究测验一下
数据库字段
总结
今天进行了用户模块的功能完善,咱们的用户模块暂时告一段落啦,用户模块算是开发好啦~下期咱们来进行前后端联调!
- 项目地址
- 后端:github.com/JokerChat/F…
- 前端:github.com/JokerChat/F…
- 今日提交代码
- 4e4e3aebaed39406e146cd76484dc13746dd51a2