我在构建Django Web应用程序时遇到了问题。 我希望如果用户登录他的帐户,他的会话应该存储,当他再次访问登录页面时,他应该被重定向到他的主页。我尝试过使用
这是我的代码。
Views.py
from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required
from django.template import RequestContext
def index(request):
return HttpResponse("Index Page")
@login_required
def home(request):
ctx = {}
return render_to_response('auth/home.html',ctx, context_instance = RequestContext(request))
Urls.py
from django.conf.urls.defaults import *
from django.contrib.auth.views import login, logout
urlpatterns = patterns('',
url(r'^$','apps.auth.views.index'),
)
urlpatterns = patterns('',
url(r'cc/', login, kwargs = {'template_name' : 'auth/cc.html'} , name = 'cc_login'),
url(r'logout/', logout, name = 'cc_logout'),
url(r'home/','apps.auth.views.home', name = 'cc_home'),
)
答案 0 :(得分:2)
我的django项目遇到了同样的情况。
我通过制作一个类似的视图来解决它:
def login_page(request):
if request.user.is_authenticated():
return redirect(<insert your desired page here>)
else:
return render(<whatever the login page is>)
这样,如果用户已登录,他们将被重定向到您希望他们成为的任何页面。
编辑:
在回应下面的评论时,我正在修改我的答案(原文仍在上面)。 以下是我为解决您的问题所做的工作。
from django.contrib.auth.views import login
def custom_login(request, **kwargs):
"""
Redirects the user to the desired page if they are authenticated
"""
if request.user.is_authenticated():
return redirect(<whatever page or view you want them to go to>)
else:
return login(request, **kwargs)
例如,您的kwargs可以是{'template_name':'your_login_template.html','authentication_form':YourCustomRegistrationFormClass}
如果您使用的是标准登录和注册程序,请将kwargs部分留空。
答案 1 :(得分:0)
我是Django的新手,但您是否尝试覆盖默认的登录视图?
views.py
from django.contrib.auth import views as auth_views
from django.shortcuts import redirect
def login(request, *args, **kwargs):
if request.method == 'POST':
request.session.set_expiry(0) # Remember user session
if request.user.is_authenticated():
return redirect(USER_PAGE_ADDRESS)
return auth_views.login(request, *args, **kwargs)
urls.py
urlpatterns = patterns('',
url(r'cc/', APP_NAME.views.login, kwargs = {'template_name' : 'auth/cc.html'} , name = 'cc_login'),
...
)