Django – login后,将用户redirect到他的自定义页面 – > mysite.com/username

默认情况下,login后,django将用户redirect到一个帐户/configuration文件页面,或者如果您编辑LOGIN_REDIRECT_URL,您可以将用户发送到您在settings.py中指定的另一个页面。

这很好,但是我希望用户(login后)被redirect到一个自定义页面,该页面的链接看起来像这样: mysite.com/username 。 所以在这种情况下,默认帐户/configuration文件或LOGIN_REDIRECT_URL设置不起作用,因为两者都是静态的。 在我的情况下,地址的username部分为每个用户更改。

任何想法如何我可以这样做,当用户login会去到一个自定义的用户页面,有用户的名字在如下地址: mysite.com/username ? 任何input是真正的赞赏。

您可以按照以下说明对用户进行身份validation和login: http : //docs.djangoproject.com/zh-CN/dev/topics/auth/#how-to-log-a-user-in

这将使您可以访问用户对象,从中获得用户名,然后执行HttpResponseRedirect到自定义URL。

一个更简单的方法依赖于从页面LOGIN_REDIRECT_URLredirect。 要实现的关键是用户信息被自动包含在请求中。

假设:

 LOGIN_REDIRECT_URL = '/profiles/home' 

你已经configuration了一个urlpattern:

 (r'^profiles/home', home), 

那么,所有你需要写的视图home()是:

 from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.contrib.auth.decorators import login_required @login_required def home(request): return HttpResponseRedirect( reverse(NAME_OF_PROFILE_VIEW, args=[request.user.username])) 

其中NAME_OF_PROFILE_VIEW是您正在使用的callback的名称。 通过djangoconfiguration文件, NAME_OF_PROFILE_VIEW可以是'profiles_profile_detail'。

是! 在你的settings.py中定义如下

 LOGIN_REDIRECT_URL = '/your-path' 

并让'/你的path'是一个简单的查看,查找self.request.user并执行任何需要返回HttpResponseRedirect对象的逻辑。

一个更好的方法可能是定义一个简单的URL,如'/simple' ,在那里执行查找逻辑。 url看起来更漂亮,节省了一些工作等等

最近进入Django,并正在寻找一个解决scheme,并find了一个可能有用的方法。

所以例如,如果使用allouth,默认的redirect是accounts / profile。 创build一个视图,使用用户名字段来redirect到一个位置,如下所示:

 def profile(request): name=request.user.username return redirect('--choose where--/' + name + '/') 

然后创build一个视图,在其中一个应用程序中捕获它,例如:

 def profile(request, name): user = get_object_or_404(User, username=name) return render(request, 'myproject/user.html', {'profile': user}) 

urlpatterns捕获的地方如下所示:

 url(r'^(?P<name>.+)/$', views.profile, name='user') 

适合我。

 return render(request,'page_location/page_name') return render(request,'home/page-login.html')