FBV

def index(nid):
    
  
""" 请求相关信息 request.method     # 请求方式 request.args       # get 方式的参数获取 request.form      # post 方式的参数获取 request.values     request.cookies       request.headers request.path      # 请求资源路径 request.full_path   # 请求全部资源漫画 request.script_root request.url       # 全部请求路径 (带协议带域名) request.files      # 请求文件 obj = request.files['the_file_name'] obj.save('/var/www/uploads/' + secure_filename(f.filename))
"""
dic = {"k1":"v1"}
  
""" 返回响应体的4种形式 字符串 jsonify 模板 跳转 url """

  # return "index"
  # return jsonify(dic)   # return render_template("xxx.html",dic=dic) # 可带数据传递   # return redirect(url_for("index")) #
跳转通过 url_for 反向解析
  
   """ 定制响应头的时候构造响应体用到 make_response """

  # 如果想设置响应头和回显cookie,就需要用到make_response
  # response = make_response(render_template('index.html'))
  # response = make_response("字符串")
  # response是flask.wrappers.Response类型
  # response.delete_cookie('key')
  # response.set_cookie('key', 'value')
  # response.headers['X-Something'] = 'A value'
  # return response

from flask import make_response,headers,set_cookie obj = make_response(jsonify(dic)) obj.headers["xxxxx"] = "123" obj.set_cookie("key","value") return obj

装饰器实现中间件功能

预备处理视图函数初始状态

@app.route('/index')
def index():
    if not session.get('user'):
        return redirect(url_for('login'))
    return render_template('index.html',stu_dic=STUDENT_DICT)

视图级别加装,比较适用于对少量视图进行处理

import functools
def auth(func):
    @functools.wraps(func)
    def inner(*args,**kwargs):
        if not session.get('user'):
            return redirect(url_for('login'))
        ret = func(*args,**kwargs)
        return ret
    return inner

@app.route('/index')
@auth
def index():
    return render_template('index.html',stu_dic=STUDENT_DICT)

全局级别加装

@app.before_request
def xxxxxx():
    if request.path == '/login':
        return None

    if session.get('user'):
        return None

    return redirect('/login')

除了 before_request 以外还有其他特殊装饰器:

1. before_request    谁先定义谁先执行
    执行多个 before 的时候如果再中间有返回值,对于after 的执行直接执行最后一次定义的那个
    
2. after_request    谁后定义谁执行 

3. before_first_request

4. template_global

5. template_filter

6. errorhandler
from flask import Flask
app = Flask(__name__)


@app.before_request
def x1():
    print('before:x1')
    return ''

@app.before_request
def xx1():
    print('before:xx1')


@app.after_request
def x2(response):
    print('after:x2')
    return response

@app.after_request
def xx2(response):
    print('after:xx2')
    return response



@app.route('/index')
def index():
    print('index')
    return "Index"


@app.route('/order')
def order():
    print('order')
    return "order"


if __name__ == '__main__':

    app.run()
befor/after_request 示例

相关文章: