【问题标题】:How to Call default home url in django when i logged out注销时如何在 django 中调用默认主页 url
【发布时间】:2014-03-28 17:40:34
【问题描述】:

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

How to Call loggedin username in Django url

在这里,我在此链接中讨论了我的观点,但我没有得到关于我的问题的具体答案,当用户登录时,我希望它显示在我的 url 中 “ 127.0.0.1:8000/username ” 因为我在上面的链接中得到了解决方案,因为创建用户定义 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/ ”。要了解我到目前为止所做的事情,请访问上面的链接,您将从讨论中了解。

请提出建议。

【问题讨论】:

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


    【解决方案1】:

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

    一旦用户使用django的默认认证机制登录,请求会自动重定向到这个页面。

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

    1. 在您的settings.py 中设置LOGOUT_URL

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

    【讨论】:

    • 感谢您的解决方案 Burhan ..它的工作...根据您给出的第二个选项,我尝试了它成功的工作...那太好了。感谢您的帮助。
    【解决方案2】:

    我认为您有点过于复杂了,如果用户登录,以下内容将允许您重定向到用户主页,否则它将显示未登录的视图。我假设 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
        }
    

    【讨论】:

    • 这也是一个好主意,蒂姆,但我有许多与这个用户定义的类相关联的模块,所以我从 Burhan 那里得到了解决方案,它可以工作。也感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多