[英]How do i set the current logged in user as default in Django view when no url parameters are given
[英]How to Call default home url in django when i logged out
請訪問此鏈接以獲取有關此問題的完整思路
在這里,我已經討論了此鏈接中的要點,但是我沒有針對我的問題的具體答案,當用戶登錄時,我希望它在我的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。 如果您使用上面的正確解決方案,那么您要做的就是:
在settings.py
設置LOGOUT_URL
。
創建注銷視圖,它可以像從文檔中的以下示例一樣簡單:
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.