为什么我无法注销 django 用户身份验证?

2024-01-10

我正在使用 django.contrib.auth 用户管理系统。

因此,我将注册/插入到用户表/模型中,并从 django.contrib.auth.views.login 进行登录,以便我可以登录。

但是,我无法使用 django.contrib.auth.views.logout 注销

我的模板中有

<h1>My Account</h1>
<strong> Welcome, {{ name|capfirst }}!</strong>
<br /><br />
<ul>
    <li>
        {% if user.is_authenticated %}
            <a href="{% url django.contrib.auth.views.logout %}">Logout</a>
        {% else %}
            <a href="{% url register %}">Sign Up</a>
    </li>
    <li>
            <a href="{% url django.contrib.auth.views.login %}">Login</a>
        {% endif %}
    </li>
</ul>

但是,我总是得到名称和注销链接,因为当我单击注销按钮时,我从未真正注销过

这是我的 urls.py 部分:

urlpatterns += patterns('django.contrib.auth.views',
    url(r'^login/$', 'login', { 'template_name': 'registration/login.html', 'SSL': settings.ENABLE_SSL }, 'login' ),
    url(r'^my_account/$', 'logout', { 'template_name': 'registration/my_account.html', 'SSL': settings.ENABLE_SSL }, 'logout' ),
)

我究竟做错了什么? 注意:我还通过 apache2 和 mod_wsgi 运行 django

Thanks!

添加信息:

不确定这是否有帮助,但我在 html 中打印了 request.session.items 并得到了

[('_auth_user_backend', 'django.contrib.auth.backends.ModelBackend'), ('_auth_user_id', 9L)] 

当我登录时以及单击注销按钮后(django.contrib.auth.views.logout)

另外,我创建了:

from django.contrib.auth import logout
def logout_view(request):
    request.session.items = []
    request.session.modified = True
    logout(request)

并将其链接到第二个注销链接/按钮,我没有注销,并且单击链接后 request.session.items 与上面保持相同

我想我正在接近:

在我的一个视图函数中,我做了:

request.session["fav_color"] = "blue"
request.session.modified = True

然后在 html {{ request.session.items }} 中打印,这给了我

    [('_auth_user_backend', 'django.contrib.auth.backends.ModelBackend'), ('_auth_user_id', 9L)] 

并且没有 ('fav_color', 'blue') 元组。我是不是又做错了什么,或者这证明我的 request.session 列表没有被修改?

小K算出来了:

url(r'^my_account/$', 'logout', { 'template_name': 'registration/my_account.html', 'SSL': settings.ENABLE_SSL }, 'logout' ),

应该

url(r'^logout/$', 'logout', { 'template_name': 'registration/my_account.html', 'SSL': settings.ENABLE_SSL }, 'logout' ),

您需要有一个注销视图,其中 url 指向该视图。模板上不需要有任何内容,只需在注销视图中包含 django.contrib.auth.logout() 即可。在新的 django 服务器上,您可以轻松注销,但您需要在视图而不是模板中执行此操作。这是 django 书中的摘录:

此示例展示了如何在视图函数中同时使用authenticate()和login():

from django.contrib import auth

def login_view(request):
  username = request.POST.get('username', '')
  password = request.POST.get('password', '')
  user = auth.authenticate(username=username, password=password)
  if user is not None and user.is_active:
      # Correct password, and the user is marked "active"
      auth.login(request, user)
      # Redirect to a success page.
      return HttpResponseRedirect("/account/loggedin/")
  else:
      # Show an error page
      return HttpResponseRedirect("/account/invalid/")

要注销用户,请在视图中使用 django.contrib.auth.logout() 。它接受一个 HttpRequest 对象并且没有返回值:

from django.contrib import auth

def logout_view(request):
  auth.logout(request)
  # Redirect to a success page.
  return HttpResponseRedirect("/account/loggedout/")

一切都参考Django的书http://www.djangobook.com/en/2.0/chapter14/ http://www.djangobook.com/en/2.0/chapter14/,我从这本书中学到了一切。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我无法注销 django 用户身份验证? 的相关文章

随机推荐

  • 如何在倒排索引结构中搜索短语查询?

    如果我们想在倒排索引结构中搜索像 t1 t2 t3 这样的查询 t1 t2 t3必须排队 我们应该采取哪些措施 1 首先我们搜索 t1 术语并找到包含 t1 的所有文档 然后对 t2 和 t3 执行此操作 然后找到 t1 t2 和 t3 位
  • 从 visio 检测 IE 上的事件

    我可以在 IE 页面上的按钮和 visio 事件之间建立链接吗 例如 只需单击 IE 页面上的按钮即可更改形状的颜色 除非您也可以访问 IE 中的 HTML 内容 否则这并不容易 但是您可以使用 VBA 类 该类实现 withevents
  • 控制狂:提交被拒绝。 Bitbucket 中不允许 Foxtrot 合并

    究竟是什么原因Control Freak Commit rejected Foxtrot merges not allowed 我们经常收到此错误 这是由于以下原因的组合造成的pull rebase and amend用户在提交时 需要明确
  • 在自定义组件中,在样式标签中加载样式更快还是使用链接标签更快?

    我正在开发一些自定义组件 我想知道在模板内的样式标签中加载样式或使用链接标签是否是最佳实践 rel stylesheet 来调用样式 使用样式标签 const template document createElement template
  • 用 OCaml 编写解释器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在大学学习一门课程 要求我从操作语义开始 用 OCaml 编写一种语言的解释器 不幸的是 除了课程
  • Objective-C 接口的前向声明

    我如何转发声明这个对象 interface MyClass NSObject
  • Node.js 和 Microsoft SQL Server

    有什么方法可以让我的 Node js 应用程序与 Microsoft SQL 进行通信吗 我还没有见过任何 MS SQL 驱动程序吗 我正在将一个非常简单的应用程序放在一起 并且需要能够与现有的 MS SQL 数据库进行通信 否则我会使用
  • 使用 Google 脚本将图像保存到电子表格

    我正在尝试使用 jSignature 将签名板添加到 Google 表格 我添加了一个记录签名的对话框 如下所示 Code gs function showDialog var html HtmlService createHtmlOutp
  • 无法通过android NDK(camera2 api)获取相机列表

    尝试使用 Qt5 12 3 和 android ndk 构建应用程序 但无法通过 ACameraManager getCameraIdList 获取相机列表 手机 索尼 xperia XA1 Ultra Qt 5 12 3 NDK r19c
  • “ngserve”命令适合生产吗?

    我正在使用 Angular 7 构建一个小项目 当你运行时 ng serve NodeJS 服务器启动来处理请求 每个请求是否会阻塞直到处理完成 我们正在尝试评估在生产中使用它与使用更传统的应用程序服务器相比有多有效 Run build p
  • Kotlin:对以函数作为参数的函数进行单元测试

    我有一个从存储库中检索项目列表的函数 我没有使用常规回调 而是传入一个函数并使用结果调用它 但是如何对这种功能进行单元测试呢 是否有某种方法可以验证传入的函数是否正在被调用 或者我应该重构并使用常规回调并使用模拟回调接口对其进行测试 My
  • 如何从 HTML 中获取所有 标记之间的数组中的文本?

    我想在所有之间获取数组中的文本 span span 来自 HTML 的标签 我尝试过使用此代码 但它只返回一次 preg match span lt span gt is row tbl highlighted icon content m
  • 用于分配分片索引的 Zookeeper

    我在网上看到过一些关于使用 Zookeeper 在服务器上线时为其分配分片编号的帖子 假设您正在跨集群对数据进行分片 但我一生都找不到如何执行此操作的 Java 代码示例 有人已经可以使用这个了吗 谢谢 跨集群分片数据有很多细节 例如复制和
  • Numpy 数组:序列太大

    我有一个大小的数组11称为 波长 和更大的尺寸数组n称为 MN 而 模型 是一个m by n array 我正在这样做 for i in xrange 10 len wavelength 2 y np empty model MN i fl
  • 如何使用“chosen.js”插件在 MVC 3 中实现多重选择

    如何实施chosen http harvesthq github io chosen MVC 3 的插件 对于这种类型的输出 这是我的代码 如何使 selected js 与 javascript MVC 一起工作 这是我的下拉列表的代码
  • 如何覆盖android中的操作栏后退按钮?

    我想自定义操作栏中的活动后退按钮 而不是硬键后退按钮 我已经覆盖了onBackPressed 方法 它适用于我的模拟器后退按钮 但不适用于操作栏后退按钮 我希望它能通过操作栏发生 我怎样才能做到这一点 这是我的代码 Override pub
  • ServiceWorker更新后如何刷新页面?

    我查阅了很多有关 Service Workers 的资源 更新您的 ServiceWorker https jakearchibald com 2014 using serviceworker today updating your ser
  • 如何测试 URL 字符串是绝对字符串还是相对字符串?

    如果 URL 是 Javascript 或 jQuery 中的相对路径或绝对路径 如何测试它 我想根据传入的 URL 是本地路径还是外部路径进行相应处理 if urlString starts with http or https do t
  • 如何使用 bash 运行 `mkdir -m -p`?

    我想要mkdir as site1 www site1 log site2 www site2 log site3 www site3 log 这些文件夹的权限是700 然后我在 Bash shell 中尝试了脚本 如下所示 sites a
  • 为什么我无法注销 django 用户身份验证?

    我正在使用 django contrib auth 用户管理系统 因此 我将注册 插入到用户表 模型中 并从 django contrib auth views login 进行登录 以便我可以登录 但是 我无法使用 django cont