手把手教你入门Python中的Web开发框架,干货满满!!
在上一边的文章当中,有粉丝嫌弃小编在可视化方面写作得太多了,希望写一些别的内容,
【Plotly快速入门】用Plotly绘制了几张精湛的图表,美翻了!!
那好吧,今天小编就说一下Python
编程语言在web
开发方面的内容。
说到web
开发框架,小编平常用Flask
和Django
的比较多,其中的Flask
属于是轻量级的开发框架,写一个API
接口也是十分地方便,不过今天我们要介绍的框架FastAPI
同样在Python
开发者当中有着较好地口碑,那么在开始之前,我们先要安装好需要用到的模块,通过pip
命令
pip install fastapi
而ASGI
服务器可以使用uvicorn
,那么同样地
pip install uvicorn
HelloWorld
我们先尝试用Flask
框架来写一个HelloWorld
,代码如下
from flask import Flask, request
import json
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'hello world'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8889)
小编用的开发工具是Pycharm
,我们运行这个脚本会弹出以下的结果
然后在浏览器当中输入弹出来的url
去访问页面,如下所示就会出现含有“hello world”的页面
从代码的逻辑中来看,app = Flask(__name__)
是创建Flask
程序实例,我们在浏览器中输入url
发送请求给web
服务器,然后web
服务器将url
转发给Flask
程序实例,因此需要知道对于每一个url
请求需要启动哪一部分的代码,所以保存了url
和Python
函数之间的映射关系,处理上述两者之间关系的是路由,是使用程序实例app.route
装饰器来实现。而执行最后的app.run()
就可以启动服务了,0.0.0.0
表示监听所有地址,指定的端口号是8889,那么我们来看一下相对应的FastAPI
版本的“HelloWorld”是什么样子的,代码如下
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse, HTMLResponse, FileResponse
import uvicorn
app = FastAPI()
@app.get("/", response_class=PlainTextResponse)
async def hello(): ## async可加可不加,这个随意
return "Hello World!"
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
if __name__ == '__main__':
uvicorn.run('fast_api_1:app', host='0.0.0.0', port=8000)
我们同样来运行这段代码,FastAPI
默认监听的地址是127.0.0.1
,端口号指定是8000,因此我们输入http://127.0.0.1:8000/
,结果如下所示
由于返回的是一个字符串,因此我们在response_class
处填的是PlainTextResponse
,同时我们也可以在浏览器中输入http://127.0.0.1:8000/items/5?q=somequery
,出来的结果如下所示
返回随机数
我们在上面的“Hello World”的基础之上再来写几个案例,例如返回随机数的操作,在Flask
框架当中的代码如下
@app.route('/random-number')
def random_number():
return str(random.randrange(100))
我们在浏览器中测试一下出来的结果,如下所示
而在FastAPI
框架当中的代码也是非常类似的
@app.get('/random-number', response_class=PlainTextResponse)
async def random_number():
return str(random.randrange(100))
判断是否都是由字母组成
接下来我们来看一下,当我们发送一个GET
请求,判断当中的一个url
请求参数是否都是由字母组成的,其中Flask
框架当中的代码如下
@app.route('/alpha', methods=['GET'])
def alpha():
text = request.args.get('text', '')
result = {'text': text, 'is_alpha' : text.isalpha()}
return jsonify(result)
我们在浏览器中测试一下出来的结果,如下所示
而在FastAPI
框架当中相对应的代码如下
@app.get('/alpha')
async def alpha(text: str):
result = {'text': text, 'is_alpha' : text.isalpha()}
return result
创建新用户
上面的几个案例都是GET
请求,下面我们来看一下POST
请求该如何处理,例如我们想通过POST
请求来创建一个新用户,在Flask
框架中的代码如下
@app.route('/create-user', methods=['POST'])
def create_user():
id = request.form.get('id', '0001')
name = request.form.get('name', 'Anonymous')
data = {'id': id, 'name': name}
result = {'status_code': '0', 'status_message' : 'Success', 'data': data}
return jsonify(result)
可以直接在Postman当中测试一下该API的功能,如下所示
我们需要在“methods”当中指定是用POST
请求,而在FastAPI
框架当中则不需要指定,直接只用app.post()
装饰器即可
@app.post('/create-user')
async def create_user(id: str = Form(...), name: str = Form(...)):
data = {'id': id, 'name': name}
result = {'status_code': '0', 'status_message' : 'Success', 'data': data}
return result
返回静态页面
而要是碰到需要返回一个静态页面的时候,在Flask
框架中的代码是这样子的
@app.route('/get-webpage', methods=['GET'])
def get_webpage():
return render_template('flask_1.html', message="Contact Us")
而在FastAPI
框架当中则稍微有些麻烦,代码如下
app.mount("/static", StaticFiles(directory="static"), name="static")
## 用来加载静态页面
templates = Jinja2Templates(directory="templates")
@app.get('/get-webpage', response_class=HTMLResponse)
async def get_webpage(request: Request):
return templates.TemplateResponse("index.html", {"request": request, "message": "Contact Us"})
由于返回的是静态页面,因此response_class
相对应的是HTMLResponse
总结
我们将上面所写的Flask代码全部都归总一下,如下所示
from flask import Flask, request, render_template
import random
from flask import jsonify
import json
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'hello world'
@app.route('/random-number')
def random_number():
return str(random.randrange(100))
@app.route('/alpha', methods=['GET'])
def alpha():
text = request.args.get('text', '')
result = {'text': text, 'is_alpha' : text.isalpha()}
return jsonify(result)
@app.route('/create-user', methods=['POST'])
def create_user():
id = request.form.get('id', '0001')
name = request.form.get('name', 'Anonymous')
data = {'id': id, 'name': name}
result = {'status_code': '0', 'status_message' : 'Success', 'data': data}
return jsonify(result)
@app.route('/get-webpage', methods=['GET'])
def get_webpage():
return render_template('flask_1.html', message="Contact Us")
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8889)
而将所有的FastAPI框架下的代码全部汇总到一起,则如下所示
from fastapi import FastAPI, Request, Form
import uvicorn
from fastapi.staticfiles import StaticFiles
from fastapi.responses import PlainTextResponse, HTMLResponse, FileResponse
import random
from fastapi.templating import Jinja2Templates
app = FastAPI()
app.mount("/templates", StaticFiles(directory="templates"), name="templates")
templates = Jinja2Templates(directory="templates")
@app.get("/", response_class=PlainTextResponse)
async def hello():
return "Hello World!"
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
@app.get('/random-number', response_class=PlainTextResponse)
async def random_number():
return str(random.randrange(100))
@app.get('/get-webpage', response_class=HTMLResponse)
async def get_webpage(request: Request):
return templates.TemplateResponse("index.html", {"request": request, "message": "Contact Us"})
if __name__ == '__main__':
uvicorn.run('fast_api_1:app', host='0.0.0.0', port=8000)
相关文章
- Python 使用 Tornado Web 框架写HTTP接口实例代码(异步+线程池)
- python整除和取余写法_Python的整除和取余[通俗易懂]
- Python入门系列(六)一篇学会python函数
- [33]python Web 框架:Tornado
- 简述python变量的命名规则_Python 变量命名规则
- python后端框架有哪些_后端框架有哪些?五款优秀的web开源后端框架推荐
- python最好的开发工具_Python编译器
- 【说站】python字典合并特性是什么
- 【说站】python pipeline的使用注意
- 【说站】python从键盘输入若干个整数
- Python标识符的命名规则,下列哪些是对的?_python标识符不能使用关键字
- python分析人口出生率代码_国家统计局居然也能用的上Python?人口数据Python脚本了解一下?…[通俗易懂]
- Python Web 框架工具包 werkzeug
- python自动化测试—Python自动化框架及工具
- Django:用于轻松安全 Web 开发的高级 Python Web 框架
- 如何用Python内置模块构建简单的REST服务、RPC服务
- Python web实战之Python3.7+ Django+百度地图API【配套视频】
- 为Python的web框架编写前端模版的教程详解编程语言
- 搞定!Linux下快速设置Python环境变量(linux设置python环境变量)
- Linux安装Web环境:一步一步指导(linux安装web环境)
- Python 最快Web框架
- 使用Python连接SQL Server数据库(python连接sqlserver)
- 器Linux下搭建简易Web服务器(linux下web服务)
- 的优势利用Redis构建Web应用,提升性能与效率(web应用中redis)
- 基于Web与Redis的安全认证技术(web redis 认证)