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 '

Hello, %s!

' % 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/
go_back1      GET        /goback1/
hello         GET, POST  /hello
hello1        GET        /hello1
hello2        GET        /hello2
hello_world   GET        /
static        GET        /static/
three_colors  GET        /colors/

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

设置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 '

Hello, %s!

' % name # 插入到返回值中

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

设置URL请求中的参数

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

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

限制了year必须是一个整数

from flask import Flask, request, redirect

app = Flask(__name__)

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

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

from flask import Flask, request, redirect

app = Flask(__name__)

@app.route('/colors/')  # 定义了一个枚举类型一样,并且指定了返回状态码
def three_colors(color):
    return '

Love is patient and kind. Love is not jealous or boastful or proud or rude

', 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钩子必须接受一个响应对象作为参数,并且返回一个响应对象。

你可能感兴趣的:(Flask之Request请求)