今天接着上一篇继续写一篇关于 flask 的随笔.
本文大纲:
1, 获取请求参数
2, 一个函数处理多个请求方式
3, 重定向
4, 错误响应
5, 全局错误处理
6, 返回 JSON 格式数据
7, 自定义返回内容状态码
一, request 获取请求参数
- from flask import Flask, request
- App = Flask(__name__)
- @App.route("/")
- def index():
- a = request
- #get 请求
- get_data = request.args
- #form 表单
- form_data = request.form
- #JSON header{application/JSON}
- json_data = request.JSON
- #file
- file_data = request.files
- #同时获取 args 和 form
- data = request.value
- method = request.method
- return a
- if __name__ == '__main__':
- App.run(debug=True)
二, 一个函数处理多个请求方式
只需要在 App.route() 中定义 method 访问方式, 并且在函数中进行相应的处理即可
- @App.route("/all_projects", methods=["GET", "POST"])
- def all_projects():
- if request.method == "GET":
- return "get"
- elif request.method == "POST":
- return "post"
三, redirect 重定向
redirect() 中传入一个参数就可以实现重定向, 那就是传入 url, 在实际操作中我们一般会使用 url_for 这个方法, 传入端点即可.
端点: Url 和视图函数的绑定关系, 默认路由的名称, 也就是这个路径绑定的函数名, 可以在 App.route() 中传入 endpoint 关键字参数进行自定义端点名称.
- from flask import Flask,redirect, url_for
- App = Flask(__name__)
- @App.route("/")
- def index():
- if request.args.get("username") is None:
- return redirect("/login")
- return redirect(url_for('login'))
- return "hello"
- @App.route("/login")
- def login():
- return "login"
- # 后面加参数, 请求的时候会自动带上这个参数
- return redirect(url_for('login', username="baijiahei"))
四, 错误响应 abort()
在一些我们可以预知的错误请求时, 可以手动给出异常响应, 使用时在 abort() 传入响应码即可, 逻辑运行到这里会自动中断, 在 abort() 中自定义了很多错误响应只需要传入响应码, 就可以直接使用
- @App.route("/")
- def index():
- if request.args.get("username") is None:
- abort(401))
- return "hello"
五, 全局错误处理
有一些我们不可预知的错误, 比如 404,500(服务器正在维护) 等情况, 我们需要对用户给出友好提示, 需要做全局错误处理
- @App.errorhandler(500)
- def server_error(error):
- return render_template("error_500.html")
使用 App.errorhandler() 传入响应状态码, 当出现这个错误时, 会执行下方函数, 在函数中我们需要一个参数来接受错误信息.
注意: 当我们定义了 @App.errorhandler() 之后, 使用 abort() 时传入的响应码如果已经被定义了, 则会调用, 而不会继续使用 abort() 内置方法
六, 返回 JSON 类型数据
这里使用了 flask 中的 jsonify
当我们使用了 jsonify 时, 返回的 Content-Type: application/JSON, 使用方法很简单传入一个 JSON 格式的数据即可
- from flask import Flask, jsonify
- import JSON
- App = Flask(__name__)
- @App.route("/login")
- def login():
- return jsonify(JSON.dumps({"code": "1"}))
七, 自定义返回内容状态码
- from flask import Flask, make_response, jsonify
- App = Flask(__name__)
- @App.route("/")
- def index():
- # 构造一个响应头信息 返回值, 响应码, 响应头信息 {}, 放在字典中 状态码或者响应头可以单个不加
- # return JSON.dumps({"username": "白加黑"}), 201, {"content-type": "application/json"}
- # make_response 第二种形式 r response()
- # r = make_response(JSON.dumps({"username": "白加黑"}), {"content-type": "application/json"})
- # r.status = "203"
- # r.content_type = "text/plain"
- # r.headers =
- # r.content_type =
- # r.mimetype =
- r = jsonify({"username": "白加黑"})
- # 修改状态码
- r.status = "202"
- return r
来源: https://www.cnblogs.com/congyiwei/p/13047425.html