新浦京81707con > 软件下载 > 装饰器顺序问题解决,开发个人博客

原标题:装饰器顺序问题解决,开发个人博客

浏览次数:125 时间:2019-06-05

下七日 RealWorld CTF 201八 web 题 bookhub 有个未授权访问的狐狸尾巴,比较风趣,赛前看了一下当面的WriteUp,大家也都没写清楚,所以就有了那篇博文。

Flask塑造个人博客连串,昨天是首先篇,大家详细疏解登六,注册模块。

能够翻译成“视图入口”,就是个名字。url_for能够用到,别的方面也得以用到(比如导航条鲜明当前页面),因为endpoint在3个app 里唯1对应到一个 view function。

前言

既然是Flask来开发,你得:

翻译整理自Stack Overflow:http://stackoverflow.com/questions/19261833/what-is-an-endpoint-in-flask

以此题是用 flask 框架写的,在www/bookhub/views/user.py中,refresh_session办法存在未授权访问漏洞,代码是如此写的:

  1. 安装

初稿中用到了my_greeting视图函数/端点,笔者猜想是答者笔误,故修改为了give_greeting。

@login_required
@user_blueprint.route('/admin/system/refresh_session/', methods=['POST'])
def refresh_session():
 pass # 这里省略内容

Flask路由是怎么着职业的

注意看 @login_required以此装饰器写在了 route装饰器上边了,导致了 login_required未调用。那么,为何会那样子吗?

pip install Flask

整个flask框架(及以Werkzeug类库为根基创设的行使)的次第观念是把U普拉多L地址映射到您想要运维的作业逻辑上(最非凡的就是视图函数),比如:

官方文档

  1. 金玉满堂最简易的二个hello word:

@app.route('/greeting/')defgive_greeting(name):return'Hello, {0}!'.format(name)

Flask 官方文书档案中有关Login Required Decorator表明那一节里面有1行表明:

views.py

注意,add_url_rule函数完成了同壹的目标,只可是未有行使装饰器,由此,上边包车型大巴先后是等价的:

To use the decorator, apply it as innermost decorator to a view function. When applying further decorators, always remember that the route() decorator is the outermost.

@app.route("/")

def hello():

return "Hello World!"

# 抬头没有应用路由装饰器,大家在最终用另1种艺术增添路由.defgive_greeting(name):return'Hello, {0}!'.format(name)app.add_url_rule('/greeting/','give_greeting', give_greeting)

大要意思正是,必须确认保证 route 装饰器在最顶层

run.py

备注:add_url_rule()中一个参数依次是ruleview_funcendpoint.

那正是说为何要那样提示呢?

from flask import Flask

app = Flask(__name__)

if __name__ == "__main__":

app.run(debug=True)

假设www.example.org站点定义了上述视图,用户在浏览器中输入以下地点

Python 装饰器顺序表明

在terminal里输入python run.py, 以往在浏览器展开, 看看产生了怎样?:)

本节内容可从来参考: Python 装饰器推行顺序迷思

很轻巧吗?貌似第叁有些点目生:

Flask的劳作就是捕捉那一个UPAJEROL地址,弄清用户想要做什么,并在多数的Python函数中相配贰个足以管理它的函数,回到我们的实例中,USportageL地址正是

小结一下就是,装饰的逐1按接近函数顺序实行,从内到外装饰,调用时由外而内,试行各种和装潢顺序相反。

@app.route是怎么着鬼?它就是用于在Flask应用中给视图函数设定路由U索罗德L的装饰器。贰只雾水?装饰器是何许? WTF?

/greeting/Mark

回过头来看 Flask

Python装饰器让我们得以用别样函数包装特定函数。 当3个函数被一个装饰器"装饰"时,这个装饰器会被调用,接着会做额外的办事,修改造量,调用原本的百般函数.

拿着这么些地址到路由表中做合作,flask开采这么些地方指向了give_greeting函数。

Flask 框架中, route装饰器是如此写的:

视图, 路由又是啥玩意儿,简单表达下:

唯独,当我们用这种最常用的秘技创制视图时,flask却向大家隐藏了一部分任何的底细新闻。在那个场景中,flask并从未直接从U奥迪Q3L地址跳转到应该响应它请求的视图函数上:

def route(self, rule, **options):
 """Like :meth:`Flask.route` but for a blueprint. The endpoint for the
 :func:`url_for` function is prefixed with the name of the blueprint.
 """
 def decorator(f):
  endpoint = options.pop("endpoint", f.__name__)
  self.add_url_rule(rule, endpoint, f, **options)
  return f
 return decorator

图片 1

URL () 被视图函数管理("give_greeting"函数)

本文由新浦京81707con发布于软件下载,转载请注明出处:装饰器顺序问题解决,开发个人博客

关键词: 新浦京81707con 日记本 跟我学python

上一篇:contribx的实例讲解,opencv_contrib的操作方法

下一篇:没有了