我正在尝试这样做,以便当已经登录的用户访问登录页面时,他们将重定向到其帐户页面。
我决定通过拥有自己的登录视图来执行此操作,该视图可检查用户是否已登录,并重定向用户是否已登录。然后,如果他们尚未登录,它将继续使用contrib登录视图。
问题是我需要能够指定contrib登录authentication_form和template_name。直接调用login()时如何指定?
我正在运行Django 1.10.3版
这是我的代码...
urls.py
from django.conf.urls import include, url
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from Account.views import RenderLoginPage
from django.contrib.auth.views import logout
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/$', RenderLoginPage, name='login'),
url(r'^logout/$', logout, {'next_page': '/login'}, name='logout')
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
views.py
from django.shortcuts import redirect
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from django.contrib.auth.views import login
from forms import LoginForm
def RenderLoginPage(request):
if request.user.is_authenticated():
return redirect(reverse("myaccount"))
else:
return login(request)
那么,如何指定template_name和authentication_form?如果我直接通过URL进行操作,而没有自定义登录视图,则可以执行此操作……但是我不能,因为我需要自定义登录视图。
url(r'^login/$', login, {'template_name': 'login.html', 'authentication_form': LoginForm}, name='login'),
不要使用基于函数的视图,而要使用基于类的视图LoginView
:
from django.contrib.auth.views import LoginView as DefaultLoginView
class LoginView(DefaultLoginView):
redirect_authenticated_user = True
login = LoginView.as_view()
或者只是简单地导入基于类的视图urls.py
并传递redirect_authenticated_user=True
:
from django.contrib.auth.views import LoginView
url(r'^login/$', LoginView.as_view(),
{'template_name': 'login.html', 'authentication_form': LoginForm, 'redirect_authenticated_user': True},
name='login')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句