在URL层次结构根路由用户配置文件

时间:2017-10-02 15:41:59

标签: django

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基本上要求同样的事情,但解决方案涉及为用户个人资料创建子路径。

1 个答案:

答案 0 :(得分:0)

我实际上会建议使用更多RESTfull方式来解决用户配置文件。一个好的组织或用户配置文件路由将是/users/{pk}/或者如果您希望客户端更容易(我们这样做)/users/me/所以客户端不需要记住它的id和用户从会话或身份验证/承载令牌或您喜欢的任何授权系统中选择。