目录

安装pyCharm

创建项目

安装FastAPI的工具

使用FastAPI

发送post请求,用postman测试

获取URL参数

请求头传递参数 Header

请求体传递参数

json格式传递数据,Body类

form表单格式传递数据,导入Form类

修改响应状态码

JSONResponse 返回数据的格式是json对象

 HTMLResponse 返回数据的方式是html页面

FileResponse 返回数据的方式是文件

通过模板引擎返回HTML页面


安装pyCharm

下载社区版,参考其他博主就行,注意是file——settings——project——project interpreter包管理

使用技巧

file——Settings——Appearance中设置背景颜色和工具栏的字体和字体大小

fastapi配置MySQL数据库 fastapi教程_ide

 file——Settings——Editor——font 设置编辑页面字体大小和行距

fastapi配置MySQL数据库 fastapi教程_ide_02

 file——Settings——Editor——File Encodings 设置编码形式

fastapi配置MySQL数据库 fastapi教程_pycharm_03

FastAPI是python web框架,重点在异步编程,python3.6版本以上

可以用FastAPI开发网站、开发web API、做一个测试平台、持续集成工具、生成文档

创建项目

选择new environment using会创建一个venv的虚拟环境,这样的好处是每个项目都是独立的空间,不会存在版本依赖冲突的问题,不会对之前的系统环境造成污染

fastapi配置MySQL数据库 fastapi教程_python_04

选择previously configured interpreter,之前配置的解释器,然后选择自己电脑上面的python版本,然后还是会创建虚拟环境,在file——settings——project——project interpreter中

show all—— + —— New environment 虚拟环境 venv —— ok 

fastapi配置MySQL数据库 fastapi教程_fastapi配置MySQL数据库_05

 两种方法结果是一样的,肯定选择第一种

安装FastAPI的工具

方法一:在pyCharm中可以用包管理工具

在file——settings——project——project interpreter中,点击+,搜索fastapi,点击Install

fastapi配置MySQL数据库 fastapi教程_ide_06

方法二:通用方法,适用于所有编辑器

打开终端(pyCharm: Terminal)

 进入venv虚拟环境——venv\Scripts\activate.bat,然后安装fastapi

pip install fastapi[all]

为了节省内存空间,可以用到什么库在安装什么,不安装全部

pip install fastapi——pip install uvicorn,uvicorn是服务器,最基本是需要这两个

pip list 查看安装的库

使用FastAPI

1.导入   from fastapi import FastAPI

2.初始化对象    app=FastAPI()

3.main  运行


方法一: if __name__ == '__main__': uvicorn.run(app)


方法二:在终端  uvicorn main:app --reload  (main是文件名)

1. fastapi文档路径

http://127.0.0.1:8000/docs

2.   """注释信息会同步到文档里面"""

发送post请求,用postman测试


@app.post("/login") def login(): return {"msg":"login success"}


# 支持多种请求 @app.api_route("/login",methods=("GET","POST")) def login(): return {"msg":"login success"}


获取URL参数


# /city/{city}?q=xx city为路径参数,?q=xx为查询参数,其中运行后为必填,不然就会报错,加上option之后 查询参数变成选填 #http://127.0.0.1:8000/city/Beijing?query_string=xx @app.get('/city/{city}') def city(city:str, query_string: Optional[str]=None): return {'city':city, 'query_string': query_string}


# 测试http://127.0.0.1:8000/user/2 , 2为传递的参数 @app.get("/user/{id}") / 加变量 def user(id): return {"id":id}


# http://127.0.0.1:8000/stu?id=8 查询字符串 @app.get("/stu") ? 加变量 def stu(id): return {"id":id}


不同的方法路径可以一样


@app.post('/stu') def stu(): return {"hello":"world"}


请求头传递参数 Header

获取用户名和密码的token,是存放在请求头中,就需要导入Header,用token值访问其他接口,也就是用请求头去传递参数


@app.get("/pra") def pra(id,token=Header(None)): #默认参数,名字必须保持一致,token——postman里面也是token return {"id":id,"token":token}


fastapi配置MySQL数据库 fastapi教程_python_07

请求体传递参数


# 请求体Body,默认参数,名字随意 @app.post("/login") def login(a=Body(None)): return {"a":a}


json格式传递数据,Body类

fastapi配置MySQL数据库 fastapi教程_fastapi配置MySQL数据库_08

form表单格式传递数据,导入Form类

保证接受的字段名称和传递的字段名称一致,Form表单类是需要下载python-multipart


@app.post("/login") def login(name=Form(None),age=Form(None)): return {"data":{"name":name,"age":age}}


fastapi配置MySQL数据库 fastapi教程_ci_09

修改响应状态码

JSONResponse 返回数据的格式是json对象


需要导入from fastapi.responses import JSONResponse # content返回的数据 status_code状态码 headers可以添加请求头里面的参数 @app.get("/user") def user(): return JSONResponse(content={"msg":"get user"}, status_code=202, headers={"a":"b"})


fastapi配置MySQL数据库 fastapi教程_fastapi配置MySQL数据库_10

 HTMLResponse 返回数据的方式是html页面


@app.get("/") def user(): html_content = """" <html> <body><p style="color:red">Hello World</p></body> </html> """ return HTMLResponse(content=html_content)


fastapi配置MySQL数据库 fastapi教程_ide_11

FileResponse 返回数据的方式是文件


@app.get("/avatar") def user(): avatar = 'static/mage.jpg' return FileResponse(avatar,filename="mage.jpg")


没有filename="mage.jpg"参数,浏览器直接显示图片,有这个参数,浏览器会提示下载图片

 需要下载一个包:aiofiles—— pip install aiofiles

fastapi配置MySQL数据库 fastapi教程_pycharm_12

通过模板引擎返回HTML页面


from fastapi.templating import Jinja2Templates 常用的模板引擎


安装 pip install jinja2

网络上的页面的数据是会改变的,所有就需要Request获取


from fastapi import FastAPI,Request from fastapi.templating import Jinja2Templates app = FastAPI() template = Jinja2Templates("pages") # 通过模板引擎返回HTML页面, context参数不能不写,且里面必须是request @app.get("/") def user(username,req: Request): return template.TemplateResponse("index.html",context={"request":req,"name":username})


username将获取到的数据放到模板引擎中

"name":username—— username是后台获取到的,name是前端的,后台渲染到前台

fastapi配置MySQL数据库 fastapi教程_ide_13