0

我想允许用户在默认情况下要到他们的用户页面(如:mywebsite.com/userpage)时,他们使用的登录表单。Django的 - 多次登录重定向

此外,如果他们去网站上的其他一些受密码保护的页面重定向到登录页面,第一,一旦被认证让他们回到他们试图访问原来的页面。

这是我迄今为止的登录功能:

views.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)) 

urls.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']得到它,但配备了一个空字符串,因为某些原因没有价值得到签署的“下一个”变量。

任何想法?

+0

Hi @avatar,检查是否在views.py下一个参数来自POST或GET。也许你应该通过GET ['next']来替换POST ['next'] – danihp

+0

我只是看着生成的HTML页面上的源代码,下一个输入字段如下所示:。因此,即使指向登录页面的网页链接具有下一个值(即http://mywebsite.com/accounts/login/?next=/messages/),{{next}}也不会捕获下一个值)。 – avatar

回答

2

我的建议 - 不要打扰与登录功能周围拧。你只是重新发明轮子。相反,使用自带的django.auth模块login view,并具有向用户发送弹出式网页(在settings.LOGIN_REDIRECT_URL定义的URL),他们需要去重定向他们。

这间视图可以像下面这样简单的事情:

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

请注意,我已经改变了重定向到使用命名视图。如果用户给出自己的用户名与网站URL一致,则不需要发生奇怪的事情!

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