在urls.py和views.py中使用login_required装饰器有什么不同吗?如果我把这一行:
url(r'^add/$', login_required(views.add_media), name = 'add_media_action')
Run Code Online (Sandbox Code Playgroud)
在urls.py中我将获得与在views.py中装饰add_media函数相同的效果:
@login_required
def add_media(request):
...
Run Code Online (Sandbox Code Playgroud)
Aym*_*ieh 31
在Python中,装饰器是一个函数,它将函数作为参数,并返回一个修饰函数.该@login_required语法可以翻译为:
def add_media(request):
...
add_media = login_required(add_media)
Run Code Online (Sandbox Code Playgroud)
因此,如果您手动应用装饰器(如在第一个片段中),它应该生成相同的效果.
如果要同时使用视图的装饰版本和未修饰版本,则第一个代码段中的方法很有用.
正如其他人所指出的,它们确实是等同的.如果您希望采用这种方法,还需要考虑另外两件事:
在urls.py中执行此操作会从定义装饰的事物的代码中的位置离开登录要求.因此,您(或其他维护者)可能会忘记该函数已被修饰.
因为您在urls文件中应用安全性,所以有人可能会错误地添加指向同一函数的另一个URL,但忘记将该函数包装在login_required中,从而导致安全漏洞.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
6003 次 |
| 最近记录: |