如何使视图只能通过重定向和仅从特定的视图进行访问?
urls.py :
#Assuming namespace = 'myApp'
url(r'^redarekt/$', views.redarekt, name='redarekt'),
url(r'^reciva/$', views.reciva, name='reciva'),
views.py :
@login_required()
def redarekt(request):
if request.user.is_authenticated() and request.user.is_active:
return HttpResponseRedirect(reverse('myApp:reciva'))
@login_required()
def reciva(request):
if request.user.is_authenticated() and request.user.is_active:
#CHECK IF IT IS A REDIRECT AND COMING FROM redarekt
execute(request)
raise Http404
raise Http404
如何让reciva
只能通过重定向和仅redarekt
来访问?
答案 0 :(得分:2)
您可以使用request.session
@login_required()
def redarekt(request):
if request.user.is_authenticated() and request.user.is_active:
request.session['pp_redarekt'] = True
return HttpResponseRedirect(reverse('myApp:reciva'))
@login_required()
def reciva(request):
if request.user.is_authenticated() and request.user.is_active:
if 'pp_redarekt' in request.session:
execute(request)
del request.session['pp_redarekt']
raise Http404
raise Http404
'pp_redarekt'
代表上一页'redarekt'
所以基本上,在重定向到reciva(request)
视图之前,您要设置添加会话密钥,即前一页是redarekt
。当您在reciva
视图中处理请求时,您正在删除该密钥,因此用户将无法输入reciva
两次或更多次。
但是为此,您需要设置会话。 Guide and docs