【问题标题】:Make view accessible only through redirect and from only one view in Django使视图只能通过重定向和 Django 中的一个视图访问
【发布时间】:2017-02-10 14:50:58
【问题描述】:

我如何使视图只能通过redirect 以及只能从特定的视图 访问?

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 访问?

【问题讨论】:

标签: python django


【解决方案1】:

您可以使用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

【讨论】:

  • 一个绝妙的解决方案。谢谢。
  • 对于 Djanog 新手 - execute(request) 实际上并不是代码的一部分!我花了 15 分钟试图找到从哪里导入 execute,但这只是 OP 表明你应该在这里编写自己的代码。
  • @Valachio 确定它特定于 OP 的问题。也许OP有execute()功能,应该不重要。
猜你喜欢
  • 1970-01-01
  • 2021-09-25
  • 2020-01-01
  • 2012-03-10
  • 2021-05-21
  • 1970-01-01
  • 2015-11-01
  • 2020-07-11
  • 1970-01-01
相关资源
最近更新 更多