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

 
 
点击上方“菜鸟学Python”,选择“星标”公众号

超级无敌干货,第一时间送达!!!

大家好,我是菜鸟哥!

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

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

4b258d242be100645aeef3d2f2efcb90.png

一、FastApi

1.FastAPI 可以做什么

它由 Sebastian Ramirez 开发

  • 开发网站

  • 开发 web API

  • 做一个测试平台

  • 做一个持续集成工具

  • 生成文档

2.为什么要学习 FastAPI

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

  • FastAPI 和 Flask 一样简约

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

  • 自动生成文档

  • 类型声明和数据检验

  • 内置身份认证

  • 性能强

  • 原生支持异步

  • 强大的依赖注入系统

  • GraphQL 和 WebSocket 支持

二、准备工作

1.编译器工具

Python、Pycharm

2.python安装教程

https://www.runoob.com/python/python-install.html

3.pycharm安装教程

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

4.安装虚拟环境

1、创建项目工程
2ba3f869fb1892f2025c4e3be0b1a517.png
2、安装环境
219ea6fb3daea9047c18363ebd9c59e7.png
3、安装fastapi
a0ef381210737e31b169cd5a47ffaf4f.png

三、教程

1.开启服务和接口访问

main.py

import uvicorn
from fastapi import FastAPI
app=FastAPI()
if __name__ == '__main__':
    uvicorn.run(app)
58bd07c22aab1465ee08e4f2e5757b83.png

服务器运行

af16021913aa28869d7dcd0bf4aaca48.png 1ee49c8029535902b9f53ca2371215b8.png

添加接口

f1d4e775582617464cc2fecb2a1943e4.png

main

import uvicorn
from fastapi import FastAPI
app=FastAPI()
# 添加首页
@app.get("/")
def index():
    return "This is Home Page."
if __name__ == '__main__':
    uvicorn.run(app)

重新运行项目
e3bb871f7023df6ad4a03aade6cd081f.png

83aa1b85b8e2a4e1201256668004fa96.png

2.json数据

979904e4fdf4c54f0ecab3783a24a735.png

重新项目

5e60fe23fdef3459e3ca9d0cc7e8eea2.png

json数据格式解析

https://www.json.cn/
25984aa5e5d82d0352e379d6e78312ae.png

3.api文档在线生成

a3da059208916c121281f6cdcd23daf8.png
文档解析
693778863ac148ccbf5855363e6f5d94.png
文档备注信息
f04eadcf8b26d3308f5441f126777b22.png

620113c45ae2043b5187c396f32513b6.png

4.发送请求

POST请求
6566ec867c499bc376c9764a291667bd.png

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

07e70ab34b3d2022fd1602769f27cae6.png 0e2ee096d67c752da9cc3c6479f9e48d.png

定义多种请求格式

34db830247290204d33ff98dd451db31.png

5.获取URL参数

3f7e3203f093033c7462352bfa0ec4ce.png
73f487640785ee4b2818a757209b4d88.png

main.py

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.获取请求头参数

b2a96f65c17ab8d2f40e7e43f0763ab4.png db27888cfd6a663ac137327fa1a7357e.png

main.py

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

25d541dbf68e69b4fe1e28ad06c78ae4.png
faef84b670071dbbc675978c945636e5.png

main.py

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信息

7f9b38f3a54ec6df6f0c9e64cb6ae4f4.png

main.py

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)

672522e9663dceaf36919e12b1f7c540.png
0747887542ef387e028720e16192ccf6.png

8.自定义返回HTML

0dbf75872b4f5b77bb4297139dc67db6.png
314e45270c2d7f63cc9f345edcc696d9.png

main.py

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="""
    <html>
        <body><p style="color:red">Hello World</p></body>
        </html>
    """
    return HTMLResponse(content=html_content)

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

9.自定义返回文件

556b151547cb0cae3cb8c9dfe39488bb.png5f578089d0f3c04bf0bb767bcbbfd501.png

main.py

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="""
    <html>
        <body><p style="color:red">Hello World</p></body>
        </html>
    """
    return HTMLResponse(content=html_content)
@app.get("/avatar")
def user():
    avatar='./static/violet.jpg'
    return FileResponse(avatar)
if __name__ == '__main__':
    uvicorn.run(app)

10.自定义返回HTML页面

d1a75f9ab0f5eaf941e0fd3db1269a0d.png
94f99684cd68d5e2faf5469acafb59c7.png
f0252812479e0714d74b8c439922f359.png

main.py

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)

返回结果

620a2336d778d2ee590e8186b41a3c69.png
155d745385902f3350bb7975abb5d4f3.png
31e6cb3be41927a26d15ed39e25936ac.png
70734b34f9ed3fe099054c50ca6fd4d1.png

11.代办事项小案例

main.py

3ffd4165781fc69d738aa28fa0d1de58.png

index.html

035609c0be5c1ecd73611748e1de01fb.png

运行项目

b68013b38fe83413152f2e4db0fa3b0c.png

main.py

b343b10b46cc424c7dd64dabd920d497.png

index.html

d1fa1f5e7e18600f18c84771a7c5f8a4.png

运行项目

ab59dab1affc3976aed41b2ae7f4789b.png

12.绑定数据库

安装 tortoise-orm

9732bc4a2a9d77a76846b161617376cc.png

安装 aiomysql

0576d39ec3df3230203c82a5b376a05b.png

main.py
a0d97495e53fadb2676ee260f6a79e19.png

13.数据库访问

00afe5e1d69c33553184ae38db4ffca0.png

models.py

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)
9e73db22fc5309bd71189b63037e357b.png

main.py

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",
                  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)

运行项目
e9d5332b875f89436a3bbf735913e312.png

14.数据库写入

main.py

8bd2965a8557001a50559b4f230f2bd1.png

运行项目

d7dd5c10a271c3ab2d423ef73be0fa98.png

数据库里就多了个字段

62159b3074409492d0e9ee334591eaf0.png

此时就是显示有问题

7aa999785d6921c47167f3ffd99a8a39.png

index.html

2eab55de514a9a7a9079460f4eccdafb.pngdc0f0a1348839815d9590b405a2e5b2a.png

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

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

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

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

 
 
 
 

推荐阅读:

入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径

干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影

趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!

AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!

年度爆款文案
1).卧槽!Pdf转Word用Python轻松搞定!
2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃
3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密 
4).80行代码!用Python做一个哆来A梦分身 
5).你必须掌握的20个python代码,短小精悍,用处无穷 
6).30个Python奇淫技巧集 
7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货 
8).再见Python!我要学Go了!2500字深度分析!
9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值