FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

创新互联是一家专注于成都网站设计、做网站与策划设计,惠山网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:惠山等地区。惠山做网站价格咨询:18980820575
关键特性:
以上这段是 FastAPI 官方文档的介绍,通过我自己的使用,发现虽然效率提升没有官方说得那么高,但是确实会快很多,而且我认为这个框架的代码书写更 pythonic 一点,如果用习惯了,在写别的 Python 代码时,也更加规范一些。
熟悉 Flask 的人上手 FastAPI 可能会比较快一些,一个 py 脚本就能搭起来一个网站,但是我们开发项目的时候,肯定不会把所有逻辑都塞在一个脚本里面,因此就需要提供一个像 Django 那样的完整项目框架,业务开发只要按照固定的规则添加就行了。虽然官方提供了一个项目框架模板,但是由于 FastAPI 自由度比较高,所以大家可以根据自己的习惯去实现一个项目框架,我就根据自己使用 Django 的习惯实现了一个我认为比较合适的框架结构。下面就是大概的介绍。
使用FastAPI + MySql + Tortoise-orm 作为主要数据库操作,项目结构参考GitHub上两个项目:
- async def jwt_authentication(
 - request: Request,
 - x_token: str = Header(
 - None,
 - title='登录Token',
 - description='登录、注册及开放API不需要此参数'
 - )
 - ):
 - """
 - 除了开放API、登录、注册以外,其他均需要认证
 - :param request:
 - :return:
 - """
 - if 'openapi' in request.url.path.lower() or \
 - 'login' in request.url.path.lower() or \
 - 'register' in request.url.path.lower():
 - return None
 - ....
 
全局登录认证(除以上接口外,其余接口均进行登录认证)
- app = FastAPI(
 - debug=settings.DEBUG,
 - title=settings.TITLE,
 - description=settings.DESCRIPTION,
 - docs_url=settings.DOCS_URL,
 - redoc_url=settings.REDOC_URL,
 - dependencies=[Depends(jwt_authentication)]
 - )
 
全局进行 Depends(jwt_authentication) 依赖注入
首先通过 auth/add 和 auth/del 接口进行权限配置
- @router.get(
 - "/info",
 - summary="获取当前用户信息",
 - name="获取当前用户信息",
 - response_model=schema.UserOut,
 - response_model_exclude_unset=True,
 - dependencies=[Depends(Authority('user,check'))]
 - )
 
在接口上添加 Depends(Authority('user,check')) 依赖注入来判断权限
在接口中进行特殊权限认证,只要使用check_authority函数判断即可,如果无权限会抛出异常
- await check_authority(f'{request.state.user.username},auth,add')
 
配置文件:
core/config/development_config.py 和 production_config.py
修改 API 文档默认地址
为了通过权限认证,将 API 文档地址修改为包含 openapi 的 URL
- # 文档地址 默认为docs
 - DOCS_URL: str = "/openapi/docs"
 - # 文档关联请求数据接口
 - OPENAPI_URL: str = "/openapi/openapi.json"
 - # redoc 文档
 - REDOC_URL: Optional[str] = "/openapi/redoc"
 
设置用户角色为 super 的用户为超级管理员
- SUPER_USER: str = 'super'
 
- # 数据库配置
 - DATABASE_CONFIG: dict = {
 - 'connections': {
 - # Dict format for connection
 - 'default': 'mysql://root:123456@127.0.0.1:3306/testdb'
 - },
 - 'apps': {
 - 'models': {
 - # 设置key值“default”的数据库连接
 - 'default_connection': 'default',
 - 'models': [
 - 'apps.user.model',
 - 'auth.casbin_tortoise_adapter'
 - ]
 - }
 - }
 - }
 
数据库使用 Tortoise-orm 库,因为我一直在使用 Django,Django 自有一套 ORM 模型操作,用起来比较方便也比较熟悉,很多人使用 sqlalchemy,我觉得这个不方便,而 Tortoise-orm 是借鉴了 Django ORM 来实现的异步数据库操作库,对于使用了 Django 的人来讲比较友好
- # 进入项目目录
 - pipenv install
 - # 进入虚拟环境
 - pipenv shell
 - # 运行服务器
 - python run.py
 
【编辑推荐】
                网站标题:FastAPI大型项目模板框架
                
                网页URL:http://www.csdahua.cn/qtweb/news9/64609.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网