还在学Django! FastAPI Web 框架教程来了!

疯狂的超级玛丽 2024-10-26 14:03:06 阅读 69

都说学Python web开发有三驾马车,其中Django, Flask应该是大家比较耳熟能详的两个著名的框架。Django大而全,很多同学觉得很重,太繁琐,而且异步高性能一直是它的短板;而flask非常小巧,容易上手,但是如果想做一个网站需要安装大量的第三方的库。

现在又有第三个框架横空出世FastAPi,它是解决高性能的一个web框架,正好解决了Django的软肋,今天菜鸟哥带大家一起来看一下。

如果你正在学习Python并且找不到方向的话可以试试我这一份学习方法+籽料呀! 点击 领取(不要米米)

一、FastApi

1.FastAPI 可以做什么

它由 Sebastian Ramirez 开发

开发网站

开发 web API

做一个测试平台

做一个持续集成工具

生成文档

2.为什么要学习 FastAPI

FastAPI 的使用方法和设计参考了几十个 python 明星项目 博采众长 吸收各家精华

FastAPI 和 Flask 一样简约

FastAPI 非常新 并且基于 python3.6 的类型声明系统

自动生成文档

类型声明和数据检验

内置身份认证

性能强

原生支持异步

强大的依赖注入系统

GraphQL 和 WebSocket 支持

二、准备工作

1.编译器工具

Python、Pycharm

2.python安装教程

<code>https://www.runoob.com/python/python-install.html

3.pycharm安装教程

runoob.com/w3cnote/pycharm-windows-install.html

4.安装虚拟环境

1、创建项目工程

2、安装环境

3、安装fastapi

三、教程

1.开启服务和接口访问

main.py

<code>import uvicorn

from fastapi import FastAPI

app=FastAPI()

if __name__ == '__main__':

    uvicorn.run(app)

 

服务器运行

添加接口

main

<code>import uvicorn

from fastapi import FastAPI

app=FastAPI()

# 添加首页

@app.get("/")

def index():

    return "This is Home Page."

if __name__ == '__main__':

    uvicorn.run(app)

重新运行项目

2.json数据

重新项目

json数据格式解析

<code>https://www.json.cn/

 

3.api文档在线生成

文档解析

文档备注信息

4.发送请求

POST请求

使用ApiPost接口测试工具来访问接口

定义多种请求格式

5.获取URL参数

main.py

<code>import uvicorn

from fastapi import FastAPI

app=FastAPI()

@app.get("/user/{id}")

def user(id):

    return {"id":id}

if __name__ == '__main__':

    uvicorn.run(app)

 6.获取请求头参数

 

main.py

<code>import uvicorn

from fastapi import FastAPI,Header

app=FastAPI()

@app.get("/user")

def user(id, token=Header(None)):

    return {"id":id,"token":token}

if __name__ == '__main__':

    uvicorn.run(app)

 

7.表单获取数据

安装包

python-multipart

 

 

 

main.py

<code>import uvicorn

from fastapi import FastAPI,Header,Form

app=FastAPI()

@app.get("/user")

def user(id, token=Header(None)):

    return {"id":id,"token":token}

@app.post("/login")

def login(username=Form(None),password=Form(None)):

    return {"data":{"username":username,"password":password}}

if __name__ == '__main__':

    uvicorn.run(app)

8.自定义返回JSON信息

main.py

<code>import uvicorn

from fastapi import FastAPI

from fastapi.responses import JSONResponse

app=FastAPI()

@app.get("/user")

def user():

    return JSONResponse(content={"msg":"get user"},

                        status_code=202,

                        headers={"a":"b"})

if __name__ == '__main__':

    uvicorn.run(app)

 

 8.自定义返回HTML

main.py

<code>import uvicorn

from fastapi import FastAPI

from fastapi.responses import JSONResponse,HTMLResponse

app=FastAPI()

@app.get("/user")

def user():

    return JSONResponse(content={"msg":"get user"},

                        status_code=202,

                        headers={"a":"b"})

@app.get("/")

def user():

    html_content="""code>

    <html>

        <body><p style="color:red">Hello World</p></body>code>

        </html>

    """

    return HTMLResponse(content=html_content)

if __name__ == '__main__':

    uvicorn.run(app)

 9.自定义返回文件

main.py

<code>import uvicorn

from fastapi import FastAPI

from fastapi.responses import JSONResponse,HTMLResponse

from starlette.responses import FileResponse

app=FastAPI()

@app.get("/user")

def user():

    return JSONResponse(content={"msg":"get user"},

                        status_code=202,

                        headers={"a":"b"})

@app.get("/")

def user():

    html_content="""code>

    <html>

        <body><p style="color:red">Hello World</p></body>code>

        </html>

    """

    return HTMLResponse(content=html_content)

@app.get("/avatar")

def user():

    avatar='./static/violet.jpg'code>

    return FileResponse(avatar)

if __name__ == '__main__':

    uvicorn.run(app)

10.自定义返回HTML页面

main.py

<code>import uvicorn

from fastapi import FastAPI,Request

from fastapi.templating import Jinja2Templates

app=FastAPI()

template=Jinja2Templates("pages")

@app.get("/")

def user(req:Request):

    return template.TemplateResponse("index.html",context={"request":req})

if __name__ == '__main__':

    uvicorn.run(app)

返回结果

 

11.代办事项小案例

main.py

index.html

运行项目

main.py

index.html

运行项目

12.绑定数据库

安装 tortoise-orm

安装 aiomysql

main.py

13.数据库访问

图片

models.py

<code>from tortoise import Model,fields

class Todo(Model):

    id=fields.IntField(pk=True)

    content=fields.CharField(max_length=500)

    create_at=fields.DatetimeField(auto_now_add=True)

    updated_at=fields.DatetimeField(auto_now=True)

图片

 

main.py

<code>import uvicorn

from fastapi import FastAPI, Request, Form

from fastapi.responses import RedirectResponse

from starlette.templating import Jinja2Templates

from tortoise.contrib.fastapi import register_tortoise

from dao.models import Todo

app=FastAPI()

template=Jinja2Templates("pages")

# 数据库绑定

register_tortoise(app,db_url="mysql://root:123456@localhost:3306/fastapi",code>

                  modules={"models":['dao.models']},

                  add_exception_handlers=True,

                  generate_schemas=True)

todos = ["写日记", "看电影", "玩游戏"]

# 添加首页

@app.get("/")

async def user(req:Request):

    todos=await Todo.all()

    print(todos)

    return template.TemplateResponse("index.html",context={"request":req,"todos":todos})

@app.post("/todo")

def todo(todo=Form(None)):

    todos.insert(0,todo)

    return RedirectResponse("/",status_code=302)

if __name__ == '__main__':

    uvicorn.run(app)

运行项目

14.数据库写入

main.py

运行项目

数据库里就多了个字段

此时就是显示有问题

index.html

图片

图片

好了,这就是今天分享的全部内容,最后小编啰嗦两句:

在性能方面,FastAPI 是领跑者,因为它是面向速度的,其次是 Flask,最后是 Django。

灵活性。灵活性是开发人员非常重视的东西,并且 Flask 比 Django 更灵活。另一方面,FastAPI 在代码方面是灵活的,并且不限制代码布局。因此,我们可以说 Flask 在这三者中是最灵活的。

职位空缺。毫无疑问,Python 网络生态系统中有 Django 要求的职位空缺更多,其次是 Flask,最后是 FastAPI,其数量要少得多,因此,如果你打算快速找到工作,那么 Django 应该是你的首选



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。