目录
安装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中设置背景颜色和工具栏的字体和字体大小
file——Settings——Editor——font 设置编辑页面字体大小和行距
file——Settings——Editor——File Encodings 设置编码形式
FastAPI是python web框架,重点在异步编程,python3.6版本以上
可以用FastAPI开发网站、开发web API、做一个测试平台、持续集成工具、生成文档
创建项目
选择new environment using会创建一个venv的虚拟环境,这样的好处是每个项目都是独立的空间,不会存在版本依赖冲突的问题,不会对之前的系统环境造成污染
选择previously configured interpreter,之前配置的解释器,然后选择自己电脑上面的python版本,然后还是会创建虚拟环境,在file——settings——project——project interpreter中
show all—— + —— New environment 虚拟环境 venv —— ok
两种方法结果是一样的,肯定选择第一种
安装FastAPI的工具
方法一:在pyCharm中可以用包管理工具
在file——settings——project——project interpreter中,点击+,搜索fastapi,点击Install
方法二:通用方法,适用于所有编辑器
打开终端(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文档路径
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}
请求体传递参数
# 请求体Body,默认参数,名字随意 @app.post("/login") def login(a=Body(None)): return {"a":a}
json格式传递数据,Body类
form表单格式传递数据,导入Form类
保证接受的字段名称和传递的字段名称一致,Form表单类是需要下载python-multipart
@app.post("/login") def login(name=Form(None),age=Form(None)): return {"data":{"name":name,"age":age}}
修改响应状态码
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"})
HTMLResponse 返回数据的方式是html页面
@app.get("/") def user(): html_content = """" <html> <body><p style="color:red">Hello World</p></body> </html> """ return HTMLResponse(content=html_content)
FileResponse 返回数据的方式是文件
@app.get("/avatar") def user(): avatar = 'static/mage.jpg' return FileResponse(avatar,filename="mage.jpg")
没有filename="mage.jpg"参数,浏览器直接显示图片,有这个参数,浏览器会提示下载图片
需要下载一个包:aiofiles—— pip install aiofiles
通过模板引擎返回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是前端的,后台渲染到前台