0

我在构建 Django Web 应用程序时遇到问题。我希望如果用户登录他的帐户,他的会话应该被存储,当他再次访问登录页面时,他应该被重定向到他的主页。我试过使用

这是我的代码。

视图.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))

网址.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'),
)
4

2 回答 2

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 部分留空。

于 2013-07-11T20:35:11.170 回答
0

我对 Django 很陌生,但是您是否尝试过覆盖默认登录视图?

视图.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)

网址.py

urlpatterns = patterns('',
    url(r'cc/', APP_NAME.views.login, kwargs = {'template_name' : 'auth/cc.html'} , name = 'cc_login'),
    ...
)
于 2013-07-11T20:35:18.767 回答