Flask之Request请求

获取请求URL中的查询字符串

请求url: http://127.0.0.1:5000/hello?name=bob

image.png

from flask import Flask, request, redirect

app = Flask(__name__)

@app.route('/hello' )
def hello():
    name = request.args.get('name', 'Flask')  # 获取查询参数name的值,name为key, Flask为默认值
    return '<h1>Hello, %s!</h1>' % name  # 插入到返回值中

路由匹配

flask为了将请求的URL匹配到对应视图函数,flask中存储了一个路由表(app.url_map)其中定义了URL规则和视图函数的映射。
如果找到了对应的视图函数,将展示。否则显示404。
可以通过flask routes来展示app.url_map表中解析到的数据

(helloflask) PS G:\python\helloflask\demoflask\demos\http> flask routes
Endpoint      Methods    Rule
------------  ---------  -------------------------------------
go_back       GET        /goback/<int:year>
go_back1      GET        /goback1/<year>
hello         GET, POST  /hello
hello1        GET        /hello1
hello2        GET        /hello2
hello_world   GET        /
static        GET        /static/<path:filename>
three_colors  GET        /colors/<any(blue, white, red):color>

从这里我们可以看到每个路由或者说是接口对应的方法,参数等信息

设置HTTP方法

在flask中,我们可以通过在@app.route()装饰器后设置http请求的方法,类似springboot中的requestMapping

from flask import Flask, request, redirect

app = Flask(__name__)
@app.route('/hello', methods={'POST', 'GET'})
def hello():
    name = request.args.get('name', 'Flask')  # 获取查询参数name的值,name为key, Flask为默认值
    return '<h1>Hello, %s!</h1>' % name  # 插入到返回值中

如果请求的方法的方式和设置的不符合,将提示405(Method Not Allowed)

设置URL请求中的参数

因为flask默认请求的URL为字符串,所以Flask内置了URL变量转换器

转换器 说明
string 不包含斜线字符串, 默认
int 整形
float 浮点型
path 包含斜线的字符串
any 匹配一系列给定值中的一个元素
uuid UUID字符串

<int>限制了year必须是一个整数

from flask import Flask, request, redirect

app = Flask(__name__)

@app.route('/goback/<int:year>')  # 限定了参数year必须是数字,否则返回404
def go_back(year):
    return 'Welcome to %d' % (2021 - year)

<any>限定了必须在url上填入你选中的值

from flask import Flask, request, redirect

app = Flask(__name__)

@app.route('/colors/<any(blue, white, red):color>')  # 定义了一个枚举类型一样,并且指定了返回状态码
def three_colors(color):
    return '<p>Love is patient and kind. Love is not jealous or boastful or proud or rude</p>', 201

请求钩子

其实个人比较难理解什么是钩子,书上是认为请求的预处理和后处理被认为是一个钩子。

钩子 说明
before_first_request 注册一个函数,在处理第一个请求前运行
before_request 注册一个函数,在处理每个请求前运行
after_request 注册一个函数,如果没有未处理的异常抛出,会在每个请求结束后运行
teardown_request 注册一个函数,即使有未处理的异常抛出,会在每个请求结束后运行。如果发生异常,会传入异常对象作为参数到注册的函数中
after_this_requtest 会在视图函数内注册一个函数,会在这个请求结束后运行
from flask import Flask, request, redirect

app = Flask(__name__)
@app.before_request
def do_something():
    print("登录了吗")

PS:after_request和after_this_request钩子必须接受一个响应对象作为参数,并且返回一个响应对象。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容