Flask易错点

装饰器

@app.route("/")
def index():
   	return "index page"
def index():
   	return "index page"
app.route("/")(index)

装饰器不仅仅是定义时可以用,还可以在定义完再使用

自定义正则转换器

from werkzeug.routing import BaseConverter

# 定义正则转换器
class ReConverter(BaseConverter):

    def __init__(self, url_map, regex):
        # 调用父类初始化方法
        super(ReConverter, self).__init__(url_map)
        # 重新赋值
        self.regex = regex
  # 添加自定义的转换器
    app.url_map.converters["re"] = ReConverter

蓝图

from flask import Blueprint, current_app

html = Blueprint("web_html", __name__)

@html.route("/<re(r'.*'):file_name>")
def web_html(file_name):

    if not file_name:
        file_name = "index.html"

    if file_name != "favicon.ico":
        file_name = "html/" + file_name

    return current_app.send_static_file(file_name)
# 注册蓝图
app.register_blueprint(html)

登录装饰器

# 定义验证登录状态的装饰器
def login_required(view_func):
    # wraps函数的作用是将wrapper内层函数的属性设置为被装饰函数view_func的属性
    @functools.wraps(view_func)
    def wrapper(*args, **kwargs):
        # 判断用户登录状态
        user_id = session.get("user_id")

        # 如果用户是登录状态,则执行登录状态
        if user_id is not None:
            # 将user_id保存到g对象中,在视图函数中,可以通过g对象获取保存数据
            g.user_id = user_id
            return view_func(*args, **kwargs)
        # 如果未登录,则返回未登录信息
        else:
            return jsonify(errno=RET.SESSIONERR, errmsg="用户未登录")
    return wrapper