3月5日 学习记录

IntYou (^_^)

flask中函数app.route()嵌套装饰器可能错误


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def atuh1(func):
@functools.wraps(func)
def inner(*arg, **kwarg):
return func(*arg, **kwarg)
return inner

def atuh2(func):
@functools.wraps(func)
def inner(*arg, **kwarg):
return func(*arg, **kwarg)
return inner

@auth1
@auth2
def index():
print("index")

单装饰器装饰: 装饰器在装饰一个函数时,此函数将被装饰器内部函数替代,如果想暴露原本函数,可以使用装饰器@functools.wraps(func)

多装饰器装饰: 优先使用内部装饰器,逐层向上

1
2
3
4
5
6
7
8
9
10
11
12
from flask import Flask
app = Flask(__name__)

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

@app.route("/login")
@auth
def login():
return "g"

@app.route() endpoint默认为函数名

两个函数使用相同函数装饰auth, 在不使用@functools.warps(func)的情况下,两个初始函数被装饰后,都将变为inner的属性,形成别名重复错误:
AssertionError: View function mapping is ovwewriting an existing endpoint function: inner

flask蓝图


flask蓝图主要功能就是分类(Blueprint),不同功能函数放在不同文件中实现:

  1. 创建蓝图

    1
    xxx = Blueprint('xxx', __name__)
  2. 在主进程中引用蓝图

    1
    2
    from '/path' import xxx
    app.register_blueprint(xxx, url_prefix='/x')

    url_prefix 添加前缀 使用: /x/xxx

Django的路由映射和Flask的蓝图有什么区别


flask:

  1. flask是利用蓝图进行模块划分的,通过app装饰器注册模块蓝图,在主模块统一调用;

  2. 在flask中,路由是通过装饰器给每个视图函数提供的, 而且根据请求方式的不同可以一个url用于不同的作用。功能相似,但是底层实现不一样

Django:

  1. Django路由映射是通过路由正则匹配映射到每一个模块的
  2. 在django中,路由是浏览器访问服务器时,先访问的项目中的url,再由项目中的url找到应用中url,这些url是放在一个列表里,遵从从前往后匹配的规则。
  • 标题: 3月5日 学习记录
  • 作者: IntYou
  • 创建于: 2023-03-05 17:34:24
  • 更新于: 2023-03-09 11:33:54
  • 链接: https://intyou.netlify.app/2023/03/05/3月5日学习记录/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
此页目录
3月5日 学习记录