使视图只能通过重定向访问,并且只能从Django中的一个视图访问 [英] Make view accessible only through redirect and from only one view in Django
问题描述
如何使视图只能通过 redirect 进行访问,并且只能从特定的视图访问?
How do I make a view to be only accessible through redirect and from a only a particular view?
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
只能通过 redirect 并仅通过 redarekt
?
How do I make reciva
to be only accessible through redirect and from a only redarekt
?
推荐答案
@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'
'pp_redarekt'
stands for Previous Page 'redarekt'
基本上,在重定向到 reciva(request)$ c之前, $ c>视图正在设置添加会话密钥,即前一页为
redarekt
。在 reciva
视图中处理请求时,您将删除该密钥,因此用户将无法输入 reciva
两次或两次以上。
So basically, before redirecting to reciva(request)
view you're setting adding session key, that says that previous page was redarekt
. When you handle your request in reciva
view, you are deleting that key, so user won't be able to enter reciva
twice or more.
但要这样做,您需要设置会话。 指南和文档
But for doing so, you need to setup your sessions. Guide and docs
这篇关于使视图只能通过重定向访问,并且只能从Django中的一个视图访问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!