我想问一下:
下面的代码中@login_required
的目的是什么?
(是的,“@ login_required”在另一个.py文件中定义)
这段代码实际上是如何工作的?这是否意味着只要使用类TaskCreateHandler
,函数login_required
将被调用?
如果我们在def post(self)中写@login_required
怎么办?
感谢。
class TaskCreateHandler(BaseHandler):
@login_required
def post(self):
答案 0 :(得分:1)
我想你正在使用Flask(带烧瓶登录)或类似的东西。
1)@ logininquired的目的是确保只有具有有效会话的用户才能访问该资源。如果您没有有效的会话flask-login将返回401(需要授权),并且您无法访问该资源。请参阅https://flask-login.readthedocs.io/en/latest/#login-example。
2)如Mohamed所述,login_required是装饰者。它将汇总你的函数(post),这意味着每当有人调用TaskCreateHandler.post时,首先调用login_required,它会执行某些操作(比如检查有效会话),然后可能调用你的函数。你的函数返回Oncae,控件被处理回@login required,这可能只返回post的结果。请参阅https://wiki.python.org/moin/PythonDecorators。
3)不起作用,因为没有什么可以装饰......
答案 1 :(得分:0)
我认为这是一个装饰器,可以在调用方法之前验证用户是否已登录。有关详细信息,请查看this好的博文。
HTH
答案 2 :(得分:0)
这里有一个装饰器。语法完全等同于:
def post: #code
post = login_required(post)
Python装饰器只是一个常规功能。它需要另一个函数作为参数,并用它来做......真的。你可以定义:
def add12(func):返回1 + 2
并将其用作装饰器。然后,如果你通过在它上面添加@add12来装饰帖子,那么无论你传入什么,对post()的任何调用都将返回3。如果不清楚原因,请再次查看上面的等效语法片段。
如果你在def中写了它,那么在这里不会有太多用处。我不是100%肯定会如何对待它;我怀疑它会抛出一个SyntaxError。