一、请求方法
常用请求方法有:get、post、put、delete
可以在设置路由的同时,通过 methods 参数设置请求方法(可设置多个,以列表形式呈现,但建议单独请求单独处理)
from flask import Flask
app = Flask(__name__)
# 在设置路由的同时,可以通过 methods 参数设置请求方式,可以设置多个(列表形式),但建议单独设置单独处理
# get 请求
@app.route('/', methods = ['get'])
def get_method():
return 'Get Method...'
# post 请求
@app.route('/', methods = ['post'])
def post_method():
return 'Post Method...'
# put 请求
@app.route('/', methods = ['put'])
def put_method():
return 'Put Method...'
# delete 请求
@app.route('/', methods = ['delete'])
def delete_method():
return 'Delete Method...'
# tlf:别忘了写,启动入口
if __name__ == '__main__':
app.run()
可通过postman模拟发送请求
注意:为更突出关键内容,以下代码均只给出关键代码,框架请借鉴上述代码
二、处理请求数据
1. get 请求处理,通过 request.args 获取请求参数(返回值为类似于字典形式)
# 处理 get 请求, 通过 request.args 获取请求参数(返回值为类似于字典形式)
@app.route("/", methods = ['get'])
def get_process():
info = request.args
name = info.get('name')
age = info.get('age')
print(f"请求信息为:{info},name={name}, age={age}")
return {"code":0,"msg":"get success"}
运行效果为:
控制台输出信息为:
2. post 请求处理,通过 request.json 获取请求信息(一般情况下,请求参数为JSON格式,返回值为字典)
# 处理 post 请求, 通过 request.json 获取请求参数
@app.route("/", methods = ['post'])
def post_process():
info = request.json
name = info.get("name")
age = info.get("age")
print(f"请求信息为:{info},name = {name}, age = {age} ")
return {"code": 0, "msg": "post success"}
通过 postman 模拟 post 请求:
控制台输出结信息为:
3. 表单请求处理,可以发送 put 或 post 请求,返回信息为字典形式
# 处理 put 请求, 通过 request.form 获取请求参数
@app.route("/", methods = ["put"])
def put_process():
info = request.form
name = info.get("name")
password = info.get("password")
password_confirm = info.get("password_confirm")
email = info.get("email")
print(f"表单信息为:{info}, name = {name}, password = {password}, password_confirm = {password_confirm}, email = {email}")
return {"code":0, "msg":"put message, 注册信息处理"}
通过 postman 模拟表单信息发送
控制台输出信息为:
4. 文件信息处理,通过 post 请求传递文件信息
- request.files.get(‘file’) 获取文件对象
- filename 获取文件对象的文件名
- save() 方法保存文件到指定路径下
服务器端代码如下:
# 处理 post 请求,发送的信息为文件
@app.route("/file/", methods = ['post'])
def post_file_process():
file = request.files.get("file") # 创建文件对象,保存传入的file信息
print(f"文件名为:{file.filename}") # 获取文件名称并打印输出
file.save(r"D:\CCPC1.jpg") # tlf:注意,此处务必在字符串(路径)前加 r,以防 \ 转义
return {"code":0, "msg":"file message"}
客户端代码如下:
import requests
# 上传文件到指定网址
def upload_file():
url = "http://127.0.0.1:5000/file/"
file = {"file":open(r"D:\CCPC2023.jpg","rb")} # tlf:注意,此处务必在字符串(路径)前加 r,以防 \ 转义
r = requests.post(url,files = file)
print(r.status_code) # 输出响应码
print(r.text) # 输出响应信息
upload_file() # tlf:注意,别忘了调用函数才能执行哦
注意:模拟处理文件请求时,先将服务器启动,再执行客户端代码
三、设置响应信息
1. 返回类型为文本(text)
# 返回类型为文本
@app.route("/text/")
def post_text():
return "响应信息为文本类型"
2. 返回类型为元组(tuple)
返回元组有以下三种写法:
- (response, status)
- (response, headers)
- (response, status, headers)
#返回类型为元组
@app.route("/tuple/")
def post_tuple():
return "黄淮学院",200,{"name":"tlf"} # 响应内容含响应体、状态码和响应头,此处使用的第三种写法
运行效果及网络监控信息如下:(注意,需要刷新一下才能看到)
3. 返回类型为 JSON 格式
两种方式:
- 直接返回 dict,系统会自动转换为 JSON 格式
- 使用 jsonify() 方法,通过参数传入键值对,从而返回 JSON 格式的信息
# 返回类型为 JSON 格式
@app.route("/json/")
def response_json():
# 第一种方法:以 字典 形式设定返回数据,系统自动转换为 JSON 格式
# return {"name":"tlf", "age":18, "sex":"female"}
# 第二种方法:通过 flask 提供的 jsonify() 方法进行返回,此处参数为 字典 形式
# return jsonify({"name":"tlf", "age":20, "sex":"female"})
# 第三种方法:通过 flask 提供的 jsonify() 方法进行返回,此处参数为 key-value 形式,会被转换为 JSON 格式
return jsonify(name="tlf",age=19,sex="female")
4. 返回类型为 html(了解即可,不建议)
- 第一步,先在代码文件所在路径下提前设定好模板(新增文件夹 templates → 新建 模板 文件)
(1)新建 templates 文件夹
(2)在 templates 文件夹下新建一个文件,用于存储 html 模板文件
设定模板文件名称:
(3)设定 html 模板文件的具体内容
- 第二步,写服务器代码,将指定 html 模板返回
# 返回类型为 html(通过调用 render_template() 方法将提前设置好的 html 模板进行返回)
@app.route("/html/")
def response_html():
# 返回提前设定好的模板,该模板需要存储在当前包下的 templates 文件夹下(名称必须是templates)
return render_template("demo.html")
5. 返回其他额外信息
参考第4项内容
# 返回其他额外信息
@app.route("/extra/")
def response_extra():
extra = make_response(render_template("demo.html")) # 调用make_response()方法构造响应实例
extra.set_cookie("name","tlf_hhxy") # 设置响应信息的cookie
extra.headers["university"] = "hhxy" # 设置响应信息的头,注意写法
return extra
运行效果为:
四、测试平台配置
在测试时,可以对监听的主机(本机 / 局域网 / 外网)、端口进行设置,而启动 Debug 模式后,服务器代码修改后会自动重新加载,无需重启服务器。
- 监听主机
- 监听端口
- Debug模式
if __name__ == '__main__':
# 设置监听的主机、端口 以及 Debug 模式
# --------------------------------------------------------
# 默认 host = "127.0.0.1"(只能本机访问),端口号为5000
# 当 host = "0.0.0.0",则可以将服务发布到局域网
# 当 host =" 外网ip",则可以将服务发布到 外网 / 公网
# --------------------------------------------------------
# 当端口号被占用或想修改端口号时,可以通过 port = 端口号 进行设定
# --------------------------------------------------------
# 系统未上线时,可以打开 Debug 模式便于测试(通过 debug = True 进行设定),此时,服务器代码修改保存后会自动重新加载,无需重启服务
app.run(host="0.0.0.0",port=5008,debug=True)
五、flask-restx 接口配置
- flask-restx 简介
flask-restx 是一个支持 Restful 风格的 flask 插件,用于规范化接口的编写,并且支持 swagger 文档,可读性强 且 可维护性强。 - restful 风格
Restful风格:网络应用中资源定位和资源操作的风格。不是标准也不是协议。 Rest是Representational State Transfer的缩写,可译为"表现层状态转化”。Restful风格最大的特点为:资源、统一接口、URI和无状态。 这种风格设计的软件更简洁、更有层次、易于实现缓存等机制。【本段内容出自:https://blog.csdn.net/weixin_56032340/article/details/122587184】 - 安装
pip install flask-restx - 官方文档
Welcome to Flask-RESTX’s documentation! — Flask-RESTX 1.1.1.dev documentation - 基本使用
from flask import Flask
from flask_restx import Api, Resource
app = Flask(__name__)
# 1、定义 api 实例对象
api = Api(app)
# 2、通过 api 添加 路由
@api.route('/index/')
# 3、定义类,该类需继承自 Resource
class Flask_Demo(Resource):
# 4、设定 restful 风格的 get 方法
def get(self):
return {"require-post":"get"}
# 设定 restful 风格的 post 方法
def post(self):
return {"require-post": "post"}
if __name__ == '__main__':
app.run(debug=True)
运行效果为:
由于未设定 “ / ” 路由,因此,若访问 127.0.0.1:5000 时,运行效果为:
未完待续…