如何使视图只能通过重定向和仅从特定视图访问?
网址.py:
#Assuming namespace = 'myApp'
url(r'^redarekt/$', views.redarekt, name='redarekt'),
url(r'^reciva/$', views.reciva, name='reciva'),
Run Code Online (Sandbox Code Playgroud)
视图.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
Run Code Online (Sandbox Code Playgroud)
如何使reciva只能通过重定向和来自 a only 访问redarekt?
您可以使用 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
Run Code Online (Sandbox Code Playgroud)
'pp_redarekt' 代表上一页 'redarekt'
所以基本上,在重定向到reciva(request)查看之前,您正在设置添加会话密钥,这表示上一页是redarekt. 当您在reciva视图中处理您的请求时,您正在删除该密钥,因此用户将无法输入reciva两次或更多次。
但为此,您需要设置会话。指南和文档