当我退出时如何在django中调用默认主页URL

时间:2014-02-26 04:58:53

标签: python django url django-views django-urls

请访问此链接以了解此问题背后的全部想法

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” ,因为我必须专门写入URL为“127.0.0.1:8000/home/”然后它的工作原理。所以任何人都可以建议我如何将网址设为“127.0.0.1:8000/home/”。要了解我现在所做的事情,请访问以上链接,您将从讨论中了解到。

请建议。

2 个答案:

答案 0 :(得分:0)

您所获得的解决方案不是正确的解决方案,正确的解决方案是使用LOGIN_REDIRECT_URL设置并将其指向视图功能,命名的URL模式或直接URL。

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

您的第二个问题是当您注销用户时,您希望被重定向到特定的URL。如果您使用上面的正确解决方案,那么您需要做的就是:

  1. settings.py

  2. 中设置LOGOUT_URL
  3. 创建您的退出视图,它可以像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/')
    
  4. 如果您想坚持使用原始解决方案,请按照以下方式进行修改:

    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/'
    

答案 1 :(得分: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
    }