这是我的目标:
http://olivier.life/today
上,则要登录的按钮将具有http://olivier.life/login?back=today
back
”请求中是否有“GET
”。如果是,那么我会重定向到GET
我的问题是一个安全问题:我只想知道GET
中的网址是否属于我的应用程序(对urls.py
文件中的某个网址有效)。
怎么做?
答案 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