在另一个文件中调用python函数

时间:2017-08-01 12:25:57

标签: python python-2.7 python-3.x

我想问一下:

  1. 下面的代码中@login_required的目的是什么?

      

    (是的,“@ login_required”在另一个.py文件中定义)

  2. 这段代码实际上是如何工作的?这是否意味着只要使用类TaskCreateHandler,函数login_required将被调用?

  3. 如果我们在def post(self)中写@login_required怎么办?

  4. 感谢。

    class TaskCreateHandler(BaseHandler):
    @login_required
    def post(self):
    

3 个答案:

答案 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。