FastAPI 工程管理(四) 工程示例
作者:麦克煎蛋 出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢!
结合前期学习的过程,整理了一份工程实例模板,在基于FastAPI框架的前提下,参考了Flask的一些业务逻辑和文件配置。
在测试环境和生产环境都经过了实际测试,个人认为可以实际应用于正式环境了。
代码地址: https://github.com/zhiyongma/fastproject
工程目录结构
├── app │ ├── auth # JWT Authorization │ ├── models # database models │ ├── routers # api routers │ └── util # utility │ ├── __init__.py # entry file │ ├── config.py # project config │ ├── database.py # database ├── deploy # deploy tools │ ├── gunicorn_fast.service # service sample │ ├── test_user.sql # user db sample ├── gunicorn.py # gunicorn config ├── local.py # for development run ├── run.py # for production run
鉴权核心流程
这里参考了Flask的@app.before_request,通过中间件的方式进行统一鉴权。
@app.middleware("http") async def process_authorization(request: Request, call_next): """ 在这个函数里统一对访问做权限token校验。 1、如果是用户注册、登陆,那么不做token校验,由路径操作函数具体验证 2、如果是其他操作,则需要从header或者cookie中取出token信息,解析出内容 然后对用户身份进行验证,如果用户不存在则直接返回 如果用户存在则将用户信息附加到request中,这样在后续的路径操作函数中可以直接使用。 """ start_time = time.time() # print(request.url) # print(request.url.path) if request.url.path == '/login' or request.url.path == '/register': logger.info('no jwt verify.') else: logger.info('jwt verify.') result = Auth.identifyAll(request) if result['status'] and result['data']: user = result['data']['user'] logger.info('jwt verify success. user: %s ' % user.username) # state中记录用户基本信息 request.state.user = user else: return JSONResponse(content=result) response = await call_next(request) process_time = time.time() - start_time response.headers["X-Process-Time"] = str(process_time) return response
在路径操作函数中,可以认为已经通过鉴权,并且可以从request.state.user中直接取出用户基础信息。
这样既方便了权限的统一控制,又减少了代码重复。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析