Django:有没有办法知道一个url在应用程序中是否有效?

时间:2015-09-21 22:46:08

标签: python django

这是我的目标:

  • 用户想要登录
  • 我在每个页面上创建了一个按钮,其中urlback作为参数,例如,如果我们在页面http://olivier.life/today上,则要登录的按钮将具有http://olivier.life/login?back=today
  • 等网址
  • 用户登录
  • 一旦用户登录,我检查“back”请求中是否有“GET”。如果是,那么我会重定向到GET
  • 中的网址

我的问题是一个安全问题:我只想知道GET中的网址是否属于我的应用程序(对urls.py文件中的某个网址有效)。

怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用urlresolver的resolve方法,如果该方法无法解析URL,则该方法会抛出异常,您可以阅读有关urlresolver here的更多信息:

from django.core.urlresolvers import resolve, Resolver404

def yourView(request):
  try:
    if hasattr(request.GET, 'back'):
      resolve(request.GET['back'])
      return HttpResponseRedirect(request.GET['back'])
  except Resolver404:
      return Response('some other thing')

答案 1 :(得分:1)

使用resolve。这个例子与文档中的这个用例非常接近。我认为对于你的情况你需要类似的东西:

def some_view(request):
    redirect_target = request.GET.get('back')
    if redirect_target:
        try:
            resolve_match = django.core.urlresolvers.resolve(redirect_target)
        except django.core.urlresolvers.Resolver404:
            # do something on bad input
        else:
            return django.shortcuts.redirect(redirect_target)
    else:
        # empty string redirect target, or not provided at all
        # do something else