Flask(三) 请求和响应相关、特殊装饰器

请求相关

# 请求由上下文管理器完成,直接导入request使用即可
from flask import request
if request.method == 'GET':
	pass

# 获取GET参数
request.args.get('username')

# 获取POST参数
request.form.get('username')

###### 请求相关信息 ######
# 请求方法
request.method

# GET请求参数
request.args

# POST请求参数
request.form

request.values

# 请求cookies
request.cookies

# 请求头
request.headers

request.path

request.full_path

request.script_root

request.url

request.base_url

request.url_root

request.host_url

request.host

# 请求携带的文件
request.files

obj = request.files['the_file_name']
obj.save('/var/www/uploads/' + secure_filename(f.filename))



form表单只能提交GET和POST请求

响应相关

# 返回字符串
return 'abc'

# 返回渲染模板
from flask import render_template
return render_template('index.html')

# 返回json
from flask import jsonify
return jsonify({'k1': 'v1'})

# 重定向
from flask import redirect
return redirect(url_for('login'))

# 定制响应头
from flask import make_response
repo = make_response('{"k1": "v1"}')
repo.headers['Content-Type'] = 'application/json'
return repo

# 设置cookie
from flask import make_response, render_template
response = make_response(render_template('index.html'))
response.set_cookie('key', 'value')
return response

特殊装饰器

# 执行顺序
# before_first_request # 按定义顺序
# before_request # 按定义顺序
# 上面两个装饰器, 如果没执行完就返回, after_request都执行
# after_request # 按定义相反的顺序

# 源码片段
class Flask(_PackageBoundObject):
	@setupmethod
    def before_first_request(self, f):
        self.before_first_request_funcs.append(f)
        return f

	@setupmethod
    def before_request(self, f):
        self.before_request_funcs.setdefault(None, []).append(f)
        return f

	@setupmethod
    def after_request(self, f):
        self.after_request_funcs.setdefault(None, []).append(f)
        return f

	@setupmethod
    def template_global(self, name=None):
        def decorator(f):
            self.add_template_global(f, name=name)
            return f
        return decorator

    @setupmethod
    def template_filter(self, name=None):
        def decorator(f):
            self.add_template_filter(f, name=name)
            return f
        return decorator

    @setupmethod
    def errorhandler(self, code_or_exception):
        def decorator(f):
            self._register_error_handler(None, code_or_exception, f)
            return f
        return decorator
posted @ 2018-08-15 21:39  ret  阅读(136)  评论(0)    收藏  举报