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