请访问此链接以了解此问题背后的全部想法
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/”。要了解我现在所做的事情,请访问以上链接,您将从讨论中了解到。
请建议。
答案 0 :(得分:0)
您所获得的解决方案不是正确的解决方案,正确的解决方案是使用LOGIN_REDIRECT_URL
设置并将其指向视图功能,命名的URL模式或直接URL。
一旦用户使用django的默认身份验证机制登录,请求将自动重定向到此页面。
您的第二个问题是当您注销用户时,您希望被重定向到特定的URL。如果您使用上面的正确解决方案,那么您需要做的就是:
在settings.py
。
LOGOUT_URL
创建您的退出视图,它可以像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/'
答案 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
}