2014-02-26 31 views
0

请访问此链接已经落后这个问题如何调用Django的默认主页网址,当我退出

How to Call loggedin username in Django url

在这里,我已经在这个环节讨论我的观点整体的想法,但我没有得到具体的答案对于我的问题,当用户登录,我希望它被显示在我的网址为 “127.0.0.1:8000/username”,因为我在上面的链接中获得解决方案作为创建用户defind HomeRedirectView,最初调用时用户登录。它工作成功,但我遇到了一个问题,当我注销并重新访问URL为“127.0.0.1:8000/”,那么这个URL会自动变成“127.0.0.1:8000/AnonymousUser”,并得到错误为“NoReverseMatch” ,因为我必须专门将它写入网址为“127.0.0.1:8000/home/”,那么它的工作原理。所以任何人都可以告诉我如何使url为“127.0.0.1:8000/home/”。要知道我现在做了什么,请访问上面的链接,你会从讨论中了解到。

请建议。

回答

0

您得到的解决方案并非正确的解决方案,正确的解决方案是使用LOGIN_REDIRECT_URL设置并将其指向视图函数,指定的URL模式或直接URL。

一旦用户使用django的默认身份验证机制登录,请求将自动重定向到此页面。

你的第二个问题是当你注销一个用户,你想被重定向到一个特定的URL。如果你使用上面的正确的解决方案,那么所有你需要做的是:

  1. LOGOUT_URLsettings.py

  2. 创建注销视图,它可以简单的this example from the documentation

    from django.shortcuts import redirect 
    from django.contrib.auth import logout 
    
    
    def logout_view(request): 
        logout(request) 
        return redirect('/home/') 
    

如果你想坚持原来的解决方案,然后修改它是这样的:

class HomeRedirectView(RedirectView): 
    pattern_name = 'home' 

    def get_redirect_url(self, *args, **kwargs): 
     if self.request.user.is_authenticated(): 
      return "/user/{}/".format(self.request.user) 
     else: 
      return '/home/' 
+0

Thanx为您的解决方案Burhan..Its工作...根据您给出的第二个选项,我试过n它成功的工作...这很好。Thanx为您的帮助。 –

0

我认为你有些过于复杂,如果用户登录,以下将允许你重定向到用户主页,否则它将显示未登录的视图。我做了这样的假设:URL中的用户名是纯粹用于显示目的(否则它可能是你的应用程序中的安全问题。

urls.py

urlpatterns = patterns('myapp.views', 
    url(r'^/$', 'home', name='home'), 
    url(r'^user/[-_.\w\d]+/$', 'user_home', name='user-home'), 
) 

views.py

from django.contrib.auth.models import User 
from django.shortcuts import redirect, render, get_object_or_404 


def home(request): 
    """ 
    Home page 
    """ 
    # If a user is authenticated then redirect them to the user page 
    if request.user.is_authenticated: 
     return redirect('user-home', request.user.username) 
    else: 
     return render(request, "myapp/home.html") 

@login_required 
def user_home(request): 
    """ 
    User specific home page, assume the username in URL is just for decoration. 
    """ 
    return render(request, "mpapp/home_user.html", { 
     "user": request.user 
    } 
+0

它也是一个好主意蒂姆,但我有很多模块这与用户定义的类相关联,所以我从Burhan得到了解决方案,它工作。感谢您的建议。 –