目录
安装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是前端的,后台渲染到前台