我正在使用默认的Django身份验证系统。在我的网址中,我有:
urlpatterns = [
...
path('', include('django.contrib.auth.urls')),
...
]
现在我有一个自定义装饰器,我想在登录视图中应用,类似于我在注册时应用它的方式。
@example_decorator
def signup(request):
...
但问题是我使用默认的登录视图。 有没有办法将此装饰器应用于默认的Auth View?
我认为我需要扩展默认视图,但我找不到任何示例。怎么办呢?
答案 0 :(得分:3)
您可以在include
之前插入装饰视图,并获得所需的行为。
from django.contrib.auth import auth_views
from your_app import example_decorator
urlpatterns = [
...
path('login/', example_decorator(auth_views.LoginView.as_view()), name='login'),
path('', include('django.contrib.auth.urls')),
...
]
答案 1 :(得分:0)
如果默认登录视图是指登录系统,登录功能;你可以用它简单地装饰它:
from django.contrib.auth import login
def decorator(f):
pass
login = decorator(login)
def my_view(request):
login()
否则如果您正在谈论clasview只是评论,所以我也可以解释它。
-------基于类的视图--------
from django.contrib.auth.views import LoginView
from django.utils.decorators import method_decorator
def decorator(f):
#your decorator
@method_decorator(decorator, name='dispatch')
class MyClass(LoginView):
pass
就docs而言,这应该可以解决问题;虽然你必须自己写这个网址,但你不能简单地包括我害怕的auth.urls。希望这可以帮助。