【问题标题】:Prevent Django from logout through url before hitting enter阻止 Django 在按 Enter 之前通过 url 注销
【发布时间】:2017-04-23 13:47:41
【问题描述】:

所以我创建了一个带有登录表单的 Django 应用程序,并在我的view.py 中使用 login(request, user) 来登录用户。这是主页,位置为mypage.com。我还在我的view.py 中创建了另一个名为log_out 的函数:

def log_out(request):
    logout(request)
    return redirect('/') 

此功能用于使用 url 注销用户:mysite.com/logout 定义在我的url.py:

url(r'^logout/', views.log_out, name='log_out'),

这正在注销用户,但是当我在浏览器的地址字段中输入注销 url 时,用户正在注销,然后再按回车键转到该端点。

我希望它在输入 url 时不要注销用户,并等到我“进入”网站。

谁能帮我解决这个问题?

【问题讨论】:

  • 除非您实际访问了logout URL,否则您的站点无法将您注销。您确定要退出“在您输入 URL 时...在按 Enter 之前”
  • 是的,我确定。当我在浏览器中输入网址时,我的服务器在我按下回车按钮之前就回复了"GET /logout/ HTTP/1.1" 302 0
  • 我猜302 是某种found the url-消息。有没有办法说像if request.GET.statuscode == 301: DO-MY-CODE。如果我没记错的话,响应码 301 是您实际访问了该网站吗?
  • 在您输入 URL 时,您是否看到您的浏览器在浏览器的网络日志中发出请求?另外,你用的是什么浏览器?
  • 您应该使用 POST 来避免预取浏览器行为。看一看:stackoverflow.com/a/14587231

标签: python django logout


【解决方案1】:

我正在做的是将用户重定向到我的登录页面。所以我应该说你应该试试这个。我的应用程序只有在我点击输入按钮后才会注销。

网址:-

app_name = 'name'
url(r'^logout$', user.logout_user, name='logout_user'),
 url(r'^$', user.login_user, name='login'),

观看次数:-

def logout_user(request):
    logout(request)
    return redirect('name:login')

【讨论】:

  • 嗯,这正是我的应用程序中的内容。猜猜我唯一的选择是使用 POST 来避免预取浏览器行为,正如上面 cmets 中建议的@danihp ..
  • 你能告诉我与这个网址相关的查看方法吗(r'^/')。我的意思是你有没有定义这个网址
  • 这是我的应用程序的根目录。说 mypage.com。这是显示登录表单的地方,该表单的 url 是 url(r'^$', views.login_view, name='login_view'),在我看来,与用户身份验证相关的所有内容都在 login_view-function 中定义。
  • 我已经更新了我的答案,使用 app_name 方法重定向到登录 like('name:login') 而不是 ('/')
【解决方案2】:

我最终使用了@danihp 建议的 POST 方法。

【讨论】:

    猜你喜欢
    • 2016-01-29
    • 2010-10-29
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 2011-02-05
    • 2015-06-22
    相关资源
    最近更新 更多