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'
   ]
但我觉得这是错误的做法

实际上,我想用overiden
login
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登录,因此它不起作用