django重写身份验证登录方法
我想覆盖django重写身份验证登录方法,django,methods,login,overriding,Django,Methods,Login,Overriding,我想覆盖django.contrib.auth 我采取了以下步骤: url.py url(r'^login/$', 'my_login'), from django.contrib import auth def login(request, user, backend=None): # do some stuff INSTALLED_APPS = [ #'django.contrib.auth', 'my_auth_app' ] 视图.py url(r'
django.contrib.auth
我采取了以下步骤:
url.py
url(r'^login/$', 'my_login'),
from django.contrib import auth
def login(request, user, backend=None):
# do some stuff
INSTALLED_APPS = [
#'django.contrib.auth',
'my_auth_app'
]
视图.py
url(r'^login/$', 'my_login'),
from django.contrib import auth
def login(request, user, backend=None):
# do some stuff
INSTALLED_APPS = [
#'django.contrib.auth',
'my_auth_app'
]
设置.py
url(r'^login/$', 'my_login'),
from django.contrib import auth
def login(request, user, backend=None):
# do some stuff
INSTALLED_APPS = [
#'django.contrib.auth',
'my_auth_app'
]
但我觉得这是错误的做法
实际上,我想用overidenlogin
method通过这种方法获得默认的contrib.auth
url.py
# separate my custom login from django default auth
path('accounts/login/', CustomLoginView.as_view(), name='login'),
path('accounts/', include('django.contrib.auth.urls')),
views.py
def custom_login(request, user, backend=None):
"""
modificated generic.auth login.
Send signal with extra parameter: previous [session_key]
"""
# get previous seesion_key for signal
prev_session_key = request.session.session_key
"""
original code
"""
# send extra argument prev_session_key
user_logged_in.send(sender=user.__class__, request=request, user=user, prev_session_key=prev_session_key)
# custom class-based view overriden on LoginView
class CustomLoginView(LoginView):
def form_valid(self, form):
"""Security check complete. Log the user in."""
# changed default login
custom_login(self.request, form.get_user())
return HttpResponseRedirect(self.get_success_url())
当我基于default login()进行自定义_登录时,恐怕这不是最好的方法,因为我复制的是原始代码的一部分。也许在这里使用装饰器更好?如果您解释了“做一些事情”涉及的内容,我们可能会建议一个更好的方法。我认为您应该在第一时间阅读此内容,这是您的答案。登录完成后,会话密钥会循环,但我需要获得上一个会话密钥。我想尝试在登录信号中添加额外的参数。可能,覆盖会话中间件是最好的方法?谢谢。我一直在努力定制登录url路径,直到我意识到我需要将它放在
path('accounts/',include('django.contrib.auth.url'))之前。
我尝试将登录url放在'account/'之前和之后,它仍然不起作用。我使用的是django双因素身份验证登录,而不是django.contrib.auth登录,因此它不起作用