菜鸟学Python”,选择“星标”公众号

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

大家好,我是菜鸟哥!

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

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

一、FastApi1.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、创建项目工程

2、安装环境

3、安装fastapi

三、教程1.开启服务和接口访问

main.py

importuvicorn

fromfastapi importFastAPI

app=FastAPI

if__name__ == '__main__':

uvicorn.run(app)

服务器运行

添加接口

main

importuvicorn

fromfastapi importFastAPI

app=FastAPI

# 添加首页

@app.get("/")

defindex:

return"This is Home Page."

if__name__ == '__main__':

uvicorn.run(app)

重新运行项目

2.json数据

重新项目

json数据格式解析

https://www.json.cn/

3.api文档在线生成

文档解析

文档备注信息

4.发送请求

POST请求

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

定义多种请求格式

5.获取URL参数

main.py

importuvicorn

fromfastapi importFastAPI

app=FastAPI

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

defuser(id):

return{ "id":id}

if__name__ == '__main__':

uvicorn.run(app)

6.获取请求头参数

main.py

importuvicorn

fromfastapi importFastAPI,Header

app=FastAPI

@app.get("/user")

defuser(id, token=Header (None)) :

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

if__name__ == '__main__':

uvicorn.run(app)

7.表单获取数据

安装包

python-multipart

main.py

importuvicorn

fromfastapi importFastAPI,Header,Form

app=FastAPI

@app.get("/user")

defuser(id, token=Header (None)) :

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

@app.post("/login")

deflogin(username=Form (None),password=Form (None)) :

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

if__name__ == '__main__':

uvicorn.run(app)

8.自定义返回JSON信息

main.py

importuvicorn

fromfastapi importFastAPI

fromfastapi.responses importJSONResponse

app=FastAPI

@app.get("/user")

defuser:

returnJSONResponse(content={ "msg": "get user"},

status_code= 202,

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

if__name__ == '__main__':

uvicorn.run(app)

8.自定义返回HTML

main.py

importuvicorn

fromfastapi importFastAPI

fromfastapi.responses importJSONResponse,HTMLResponse

app=FastAPI

@app.get("/user")

defuser:

returnJSONResponse(content={ "msg": "get user"},

status_code= 202,

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

@app.get("/")

defuser:

html_content= """

<html>

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

</html>

"""

returnHTMLResponse(content=html_content)

if__name__ == '__main__':

uvicorn.run(app)

9.自定义返回文件

main.py

importuvicorn

fromfastapi importFastAPI

fromfastapi.responses importJSONResponse,HTMLResponse

fromstarlette.responses importFileResponse

app=FastAPI

@app.get("/user")

defuser:

returnJSONResponse(content={ "msg": "get user"},

status_code= 202,

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

@app.get("/")

defuser:

html_content= """

<html>

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

</html>

"""

returnHTMLResponse(content=html_content)

@app.get("/avatar")

defuser:

avatar= './static/violet.jpg'

returnFileResponse(avatar)

if__name__ == '__main__':

uvicorn.run(app)

10.自定义返回HTML页面

main.py

importuvicorn

fromfastapi importFastAPI,Request

fromfastapi.templating importJinja2Templates

app=FastAPI

template=Jinja2Templates( "pages")

@app.get("/")

defuser(req:Request):

returntemplate.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

fromtortoise importModel,fields

classTodo(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

importuvicorn

fromfastapi importFastAPI, Request, Form

fromfastapi.responses importRedirectResponse

fromstarlette.templating importJinja2Templates

fromtortoise.contrib.fastapi importregister_tortoise

fromdao.models importTodo

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("/")

asyncdefuser(req:Request):

todos= awaitTodo.all

print(todos)

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

@app.post("/todo")

deftodo(todo=Form (None)) :

todos.insert( 0,todo)

returnRedirectResponse( "/",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 应该是你的首选

入门: 最全的零基础学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爬虫神器太爽了,自动下载妹子图片