Facebook,GitHub和Twitter都将用户个人资料网址放在其网址层次结构的根目录下,例如http://twitter.com/jack
。
必须这样做,以便其他"系统"首先解析http://twitter.com/search
之类的网址,因此名为@search的用户无法劫持网站的一部分。
如果不存在系统URL,并且没有找到此类用户配置文件,则必须抛出404。
使用Django的URL路由实现这一目标的最佳方法是什么?我目前的解决方案是:
urlpatterns = [
url(r'^admin/', admin.site.urls),
# etc, ..., then this last:
url(r'^(?P<username>.+)$', views.view_profile),
]
def view_profile(request, username):
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
raise Http404('User does not exist')
return HttpResponse(username + ' exists!')
通过这种方式,view_profile
视图对于任何其他地方都没有处理过的URL都是一个包罗万象的视图。但是,如果没有用户存在,它负责抛出404异常似乎并不理想,我宁愿提出一些错误的路由&#34;告诉Django的URL路由器继续尝试路由请求的信号。这样404就是由Django生成的,就像我没有抓住所有路线一样。
This question基本上要求同样的事情,但解决方案涉及为用户个人资料创建子路径。
答案 0 :(得分:0)
我实际上会建议使用更多RESTfull方式来解决用户配置文件。一个好的组织或用户配置文件路由将是/users/{pk}/
或者如果您希望客户端更容易(我们这样做)/users/me/
所以客户端不需要记住它的id和用户从会话或身份验证/承载令牌或您喜欢的任何授权系统中选择。