我想重写django.contrib.auth
的__init__.py
中的login
函数
我做了以下步骤:
urls.py
url(r'^login/$', 'my_login'),
views.py
from django.contrib import auth
def login(request, user, backend=None):
# do some stuff
settings.py
INSTALLED_APPS = [
#'django.contrib.auth',
'my_auth_app'
]
但我觉得这是错误的做法。
实际上我想使用覆盖的login
方法获得默认的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')),
View .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())
当我基于默认的login()制作custom_login时,恐怕这不是最好的方法,因为我正在复制部分原始代码。也许在这里使用装饰器更好?
关于django覆盖auth登录方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48303572/