fastapi 学习记录

目录

      • 1.创建app
      • 2.静态文件路径
      • 3.模板(前后端不分离)
      • 4.参数
        • 4.1路径参数
        • 4.2查询字符串参数
        • 4.3表单参数
        • 4.4请求体参数
        • 4.5依赖 Depends
        • 4.6 请求头
      • 5.响应
      • 6.中间件
      • 7.CORS跨域请求
      • 8.异常处理Haddler
      • 9.BackgroundTasks
      • 10.类视图
      • 11.JWT
      • 12 WebSocket
      • 13.部署 uvicorn + supervisor

安装模块

pip install fastapi

1.创建app

from fastapi import FastAPI

app = FastAPI()

@app.get()
async def index():
    return ok

2.静态文件路径

from fastapi.staticfiles import StaticFiles

static = StaticFiles(directory='./statics') # 静态文件目录名称可以直接写‘statics’

app.mount('/static',static,name='')    # 第一个参数是访问静态文件的uri,name的作用是方便反向解析

3.模板(前后端不分离)

from fastapi.templating import Jinja2Templates

template=Jinja2Templates(directory='./templates')    # 存放模板的目录

# JinJa2模板引擎  渲染时调用
template.TemplateResponse('模板文件.html',context={
   'request':request,***})
# 当后端渲染时,必须返回前端request对象,以及其他参数,可以是python对象
# 在html页面模板中,可以使用 {
   { python对象 }} 渲染,例如  context={'request':request,'name':'test'}

# 想要渲染出name的值,只需要  {
   { name }},即可在浏览器中显示name对应的值’test‘
# JinJa2模板引擎还提供了for循环、if判断等方法

# example   context={'request':request,'a':[1,2,3,4]}
{
   % for i in a %}
	<li>{
   {
    i }}</li>
{
   % endfor %}


{
   % for i in a %}
	{
   % if i<2 %}
	<li>{
   {
    i }}</li>
    {
   % else %}
    <li>{
   {
    i+1 }}</li>
    {
   % endif %}
{
   % endfor %}

4.参数

4.1路径参数
from fastapi import FastAPI,Path

app = FastAPI()

@app.get('/{id}')
async def func1(id:int):    # id就是路径参数,设置了类型校验
    pass

@app.get('/test/{id}')
async def func2(id:int=Path(...,ge=1)):    # Path是路径参数的类,可以做验证,即对路径参数的校验
    pass

Path(  # noqa: N802
    default: Any,                          # None为非必传参数,...为必传,指定值为默认
    *,									   # 如果传了*,则说明后面的参数全部为关键字参数
    alias: str = None,					   # 别名,至前端传参时的参数名
    title: str = None,					   # 说明
    description: str = None,
    gt: float = None,					   # 只对int/float格式的参数,gt:大于
    ge: float = None,					   # ge :大于等于
    lt: float = None,                      # lt :小于
    le: float = None,					   # le:小于等于
    min_length: int = None,				   # 只能用于str格式的参数,最小长度
    max_length: int = None,				   # 只能用于str格式的参数,最大长度
    regex: str = None,					   # 只能用于str格式的参数,正则
    deprecated: bool = None,
    **extra: Any,
)
4.2查询字符串参数
from fastapi import FastAPI,Query

app = FastAPI()

@app.get('/')
async def func1(a:str,b:int):    # 直接定义要接收的参数,只能校验类型
    pass

@app.get('/1')
async def func2(a:str=Query(),b:int=Query()):    # 可以校验类型以及其他的参数,与Path类似
    pass

4.3表单参数
from fastapi import Form,UploadFile
from typing import List
app = FastAPI()


@app.post('/index/dc')
async def index_post(request: Request, file1: bytes = File(...), name: str = Form(None), age: int = Form(None)):
    print(name)
    return name, age

# 或者使用UploadFile进行校验
@app.post('/index/dc')
async def index_post(request: Request, file1: UploadFile = File(...), name: str = Form(None), age: int = Form(None)):
    print(name)
    return name, age

想要使用表单,必须先安装python-multipart 模块

<form action="./index/dc" method="post" enctype="multipart/form-data">
    <input type="file" name="file1">
    <input type="text" name="name">
    

你可能感兴趣的:(web后端,python)