使视图只能通过重定向访问,并且只能从Django中的一个视图访问 [英] Make view accessible only through redirect and from only one view in Django

查看:54
本文介绍了使视图只能通过重定向访问,并且只能从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?

推荐答案

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'

'pp_redarekt' stands for Previous Page 'redarekt'

基本上,在重定向到 reciva(request)视图正在设置添加会话密钥,即前一页为 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆