簡體   English   中英

我登出后如何在Django中呼叫預設的首頁網址

[英]How to Call default home url in django when i logged out

請訪問此鏈接以獲取有關此問題的完整思路

如何在Django URL中調用登錄的用戶名

在這里,我已經討論了此鏈接中的要點,但是我沒有針對我的問題的具體答案,當用戶登錄時,我希望它在我的URL中顯示為“ 127.0.0.1:8000/username”,因為我在上面的鏈接中獲得了解決方案創建用戶定義HomeRedirectView時,該用戶最初在用戶登錄時調用。 並且它可以成功運行,但是當我注銷並以“ 127.0.0.1:8000/”重新訪問該URL時出現問題,然后此URL自動變為“ 127.0.0.1:8000/AnonymousUser”,並收到錯誤消息“ NoReverseMatch” ,為此,我必須將其專門寫為url為“ 127.0.0.1:8000/home/”,然后它才能工作。 因此,有人可以建議我如何將網址設為“ 127.0.0.1:8000/home/”。 要了解我現在所做的一切,請訪問上面的鏈接,您將從討論中了解到。

請提出建議。

您得到的解決方案不是正確的解決方案,正確的解決方案是使用LOGIN_REDIRECT_URL設置並將其指向視圖函數,命名的URL模式或直接URL。

使用django的默認身份驗證機制登錄用戶后,請求將自動重定向到此頁面。

第二個問題是,當您注銷用戶時,您想要重定向到特定的URL。 如果您使用上面的正確解決方案,那么您要做的就是:

  1. settings.py設置LOGOUT_URL

  2. 創建注銷視圖,它可以像從文檔中的以下示例一樣簡單:

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

我認為您使事情變得有些復雜,如果用戶登錄,以下內容將使您重定向到用戶主頁,否則它將顯示未登錄的視圖。 我已經假設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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM