Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 禁用浏览器&x27;背面';注销后的按钮?_Javascript_Python_Django_Django Admin - Fatal编程技术网

Javascript 禁用浏览器&x27;背面';注销后的按钮?

Javascript 禁用浏览器&x27;背面';注销后的按钮?,javascript,python,django,django-admin,Javascript,Python,Django,Django Admin,我将python与django一起使用,我希望在用户注销后单击后退按钮时将用户重定向到登录页面。如何做到这一点?在哪里写代码 为了测试django admin是否能处理这个问题,我登录到django admin,注销,然后点击back按钮,我就可以看到上一页了。为什么django管理员不处理这个问题 这是django admin中注销的ccode: def logout(request): """ Removes the authenticated user's ID from the r

我将python与django一起使用,我希望在用户注销后单击后退按钮时将用户重定向到登录页面。如何做到这一点?在哪里写代码

为了测试django admin是否能处理这个问题,我登录到django admin,注销,然后点击back按钮,我就可以看到上一页了。为什么django管理员不处理这个问题

这是django admin中注销的ccode:

def logout(request):
  """
 Removes the authenticated user's ID from the request and flushes their
 session data.
 """
 request.session.flush()
 if hasattr(request, 'user'):
     from django.contrib.auth.models import AnonymousUser
     request.user = AnonymousUser()

这取决于您使用的是哪种身份验证系统。如果您使用某种自己的impl,您可以编写自己的
中间件
类,将未经身份验证的用户重定向到登录页面


如果您正在使用某些lib,请检查其文档,了解它如何处理未经身份验证用户对安全页面的请求。

在您注销并回击后,您可以打开管理页面的原因是,您看不到真实页面。而是在浏览器缓存中看到它的副本

试试这个:

  • 转到任何管理页面
  • 单击“注销”
  • 点击浏览器中的“后退”按钮
  • 按F5键或在浏览器中单击“刷新”

  • 现在,您将被重定向到管理员后端的登录页面。

    最终找到了解决方案:

    from django.views.decorators.cache import cache_control
    
    @cache_control(no_cache=True, must_revalidate=True)
    def func()
      #some code
      return
    

    这将强制浏览器向服务器发出请求。

    您可能会发现需要在chrome中使用@cache\u控件(no\u cache=True、must\u revalidate=True、no\u store=True)来完全停止任何后退按钮查看


    关键是没有chrome商店,我在这里找到了数字蛋糕的答案!这也解决了在FireFox上注销后备份到缓存页面的问题。我试过:

    @缓存控制(无缓存=真,必须重新验证=真)

    在我看来没有运气。每个数字蛋糕,尝试:

    @缓存控制(无缓存=真,必须重新验证=真,无存储=真)


    现在Firefox返回到登录屏幕。

    我知道这是一个老问题,但被接受的答案对我来说并不适用。我也面临同样的问题(使用django 1.8和Chrome)

    最后,我从(django 1.7或更高版本)中找到了解决方案。这肯定会奏效

    请看下面的代码

    from django.contrib.auth.decorators import login_required
    
    @login_required(login_url='/login/')
    def myview(request):
        return HttpResponse(render(request,'path_to_your_view.html'))
    

    @login\u required
    装饰器用于处理问题。您可以在文档中查看更多信息这是一个缓存问题

    您可以使用cache_control decorator强制在视图上不缓存:

    from django.views.decorators.cache import cache_control
    
    @cache_control(no_cache=True, must_revalidate=True, no_store=True)
    def func()
      # some code
      return
    
    这将强制浏览器向服务器发出请求


    更多关于

    我粘贴的代码是django.contrib.auth.logout。这不是我自己的代码。我只使用django admin。这个问题存在于django管理员中。哦,天哪…*现在*我明白你的问题了。我将重写我的答案。我知道如果单击“后退”按钮,将不会向服务器发送任何请求。但我仍然不希望用户像google doesOk一样看到该页面,我想这是您需要的:@GeorgeK它确实有效!尝试将装饰器也放在登录视图上。不适用于Safari 13.0.3(Mac OS X Catalina 10.15.1)不适用于Safari 13.0.3(Mac OS X Catalina 10.15.1)不适用于Safari 13.0.3(Mac OS X Catalina 10.15.1)