1

我想让用户在使用登录表单时默认转到他们的用户页面(例如:mywebsite.com/userpage)。

此外,如果他们访问网站上的其他密码保护页面,首先将他们重定向到登录页面,一旦通过身份验证,就可以将他们返回到他们尝试访问的原始页面。

这是我到目前为止的登录功能:

视图.py

def user_login(request):
    if request.method == 'POST': 
        form = AuthenticationForm(request.POST)
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                # Redirect to a successpage
                if request.POST['next']:
                    return HttpResponseRedirect(request.POST['next'])
                else:    
                    return HttpResponseRedirect("/" + username + "/")
            else:
                errors = 'This account has been disabeled.'
        else:
            # Return an 'invalid login' error message.
            errors = 'There is a problem with the user name and/or the password. Please try again.'
    else:
        form = AuthenticationForm()
    return render_to_response("registration/my_login.html", locals(), context_instance=RequestContext(request))

网址.py

urlpatterns = patterns('',
                       url(r'^login/$', user_login,),

my_login.html

<form action="." method="post" >{% csrf_token %}
    {{errors}}
    {{ form.as_p }}
    <p class="submit"><button type="submit" name="login_user_button" value="Login">Log in</button></p>
    <input type="hidden" name="next" value="{{ next }}">
    </form>

我的问题是我不知道如何获取“下一个”变量的值,所以我可以在我的user_login函数中使用它进行重定向。

如您所见,我尝试使用它request.POST['next']但带有一个空字符串,因此由于某种原因,没有值被签名到“下一个”变量。

有任何想法吗?

4

1 回答 1

2

我的建议 - 不要费心使用登录功能。你只是在重新发明轮子。相反,使用django.auth 模块附带的登录视图,并将用户发送到插页式页面(在settings.LOGIN_REDIRECT_URL中定义的 URL )将他们重定向到他们需要去的地方。

这种间隙视图可能很简单,如下所示:

@login_required
def index(request):
    return redirect('user-page', request.user.username)

请注意,我已将该重定向更改为使用命名视图。如果用户给自己的用户名与站点 url 一致,您不希望发生奇怪的事情!

还要注意login_required装饰器。这会自动为您提供所需的登录页面重定向。

于 2011-11-02T01:07:41.300 回答