二、Flask_路由定义与http的请求/响应

1. 路由定义

1.1 路由基本定义

...
# 指定访问路径为 demo
@app.route('/demo')
def demo():
    return 'demo'
...

1.2 路由传递参数(两种)

  1. 没有限定类型
    #
    @app.route('/user/<user_id>')
    def user_info(user_id):
        return 'hello %s' % user_id
  2. 限定数据类型
    #
    @app.route('/user/<int:user_id>')
    def user_info(user_id):
        return 'hello %d' % user_id

1.3 路由限定请求方式

#
@app.route('/demo', methods=['GET', 'POST'])
def demo():
    # 直接从请求中取到请求方式并返回
    return request.method

1.4 正则匹配路由

在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,根据自己的规则去限定请求参数再进行访问

具体实现步骤为:

  • 导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录

  • 自定义转换器:自定义类继承于转换器基类

  • 添加转换器到默认的转换器字典中

  • 使用自定义转换器实现自定义匹配规则

代码实现

  1. 导入转换器基类
    from werkzeug.routing import BaseConverter
  2. 自定义转换器
    # 自定义正则转换器
    from werkzeug.routing import BaseConverter
    class RegexConverter(BaseConverter):
        def __init__(self,url_map,*args):
            super(RegexConverter, self).__init__(url_map)
            # 正则参数
            self.regex = args[0]
  3. 添加转换器到默认的转换器字典中,并指定转换器使用时名字为: re
    # 将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: re
    app.url_map.converters['re'] = RegexConverter
  4. 使用转换器去实现自定义匹配规则
    # 当前此处定义的规则是:手机号码
    
    # 正则匹配路由
    @app.route("/login/<re('1\d{10}'):mobile>")
    def login(mobile):
        return mobile

1.5 系统自动转换器

#
DEFAULT_CONVERTERS = {
    'default':          UnicodeConverter,
    'path':             PathConverter,
    'string':           UnicodeConverter,
    'any':              AnyConverter,
    'int':              IntegerConverter,
    'float':            FloatConverter,
    'uuid':             UUIDConverter,
}

系统自带的转换器具体使用方式在每种转换器的注释代码中有写,请留意每种转换器初始化的参数。

2 http请求与响应

文档:http://docs.jinkan.org/docs/flask/api.html#flask.request

2.1 请求

  • request:flask中代表当前请求的 request 对象

  • 作用:在视图函数中取出本次请求数据

  • 导入:from flask import request

 常用的属性如下:

属性 说明 类型
data 记录请求的数据,并转换为字符串 *
form 记录请求中的表单数据 MultiDict
args 记录请求中的查询参数 MultiDict
cookies 记录请求中的cookie信息 Dict
headers 记录请求中的请求头 EnvironHeaders
method 记录请求使用的HTTP方法 GET/POST
url 记录请求的URL地址 string
files 记录请求上传的文件 *
json 记录请求的json数据 json

猜你喜欢

转载自www.cnblogs.com/yijue-lu/p/10951809.html