3.4 Request对象

之前我们定义的url请求路径是rest风格的 /book/search/<q>/<page>,Flask会将<>里的值自动映射成视图函数方法的参数。

但是如果需要将方法参数做为请求参数传入进来。就需要用到Flask内置的Request了。Request里包含了HTTP请求的详细信息,比如param,method,url,remote ip等。

下面看一下我们之前search函数的改造来了解一下Requset获取请求参数的基本用法

from flask import request

...
...
@web.route("/book/search/")
def search():
    """
    搜索书籍路由
    :param q: 关键字 OR isbn
    :param page: 页码
    """
    q = request.args['q']
    page = request.args['page']
    isbn_or_key = is_isbn_or_key(q)
    if isbn_or_key == 'isbn':
        result = YuShuBook.search_by_isbn(q)
    else:
        result = YuShuBook.search_by_key(q)

    return jsonify(result)

Request 的args属性是一个不可变字典(继承了python内置的dict)immutableDict。里面放的就是http请求的参数。可以使用to_dict()方法获取请求参数的原生可变字典request.args.to_dict()

注意,Flask的request是基于代理模式实现的。想让request正常使用,必须确保是http请求触发的函数或视图函数中使用

Last updated