【问题标题】:DJANGO: How to allow Users to change password?DJANGO:如何允许用户更改密码?
【发布时间】:2012-04-26 05:25:28
【问题描述】:

所以我有用户(从 django.contrib.auth.models 导入用户)和 UserProfiles。在我的 UserProfile 视图中有一个编辑链接。此编辑链接允许用户更改其用户设置。在表单的密码部分,我看到帮助文本:

"Use '[algo]$[salt]$[hexdigest]' or use the change password form." 

“更改密码表单”实际上是指向http://127.0.0.1:8000/user/1/user_edit/password/ 的链接,当我单击该链接时,我收到一条错误消息:

ViewDoesNotExist at /user/1/user_edit/password/

Could not import testdb.views.django.contrib.auth.views. Error was: No module named django.contrib.auth.views

我一直在关注文档:https://docs.djangoproject.com/en/dev/topics/auth/

我做错了什么?我听说这应该使用 djangos 模板,我需要将它们复制到我的应用程序模板文件夹吗?如果有,他们在哪里?

URLS.PY

from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('testdb.views',
url(r'^$', 'index'),
url(r'^^user/(?P<user_id>\d+)/$', 'user_detail'),
url(r'^user/(?P<user_id>\d+)/user_edit/$', 'user_edit'),
url(r'^user/(?P<user_id>\d+)/user_edit/password/$', 'django.contrib.auth.views.password_change', {'template_name': 'password_change_form'}),
)

【问题讨论】:

  • 你能发布完整的 urls.py 吗?你导入了 django.contrib.auth.views.password_change 吗?
  • 我在我的 VIEWS.py 中从 django.contrib.auth.views 导入 * 并且我更新了我的 URLS.py

标签: python django passwords django-templates authentication


【解决方案1】:

您定义了错误的 URL 模式:当您在 patterns('testdb.views', 中定义 password_change 视图时,Django 尝试查找 testdb.views.django.contrib.auth.views

添加第二个模式:

urlpatterns += patterns('django.contrib.auth.views',
  url(r'^user/(?P<user_id>\d+)/user_edit/password/$', 'password_change')
)

这应该可以解决您的问题。

【讨论】:

  • 如果您将视图引用为字符串,则无需导入。
  • 它有点工作,我得到一个错误,说 password_change() 得到了一个意外的关键字参数 'user_id'
  • 这是由于您的模式的 "(?P\d+)" 位;重命名它以匹配 password_change() 签名...即删除它。
【解决方案2】:

cfedermann 为您的问题提供了解决方案,但我对您为什么首先定义 password_change URL 感到困惑。此功能内置于管理员中,并且 - 与所有其他管理员页面一样 - URL 已由管理员代码本身定义。

【讨论】:

  • 将 url 定义为“url(r'^user/(?P\d+)/user_edit/password/$', 'password_change')”?我这样做是因为我的编辑用户/用户配置文件表单中的密码字段使用了该 url。
  • 这是为了您自己的观点,在管理员之外?在这种情况下,我认为问题在于您的 URLconf 覆盖了 contrib.auth 中定义的那个,因此管理员试图链接到您的而不是内置的。尝试更改您自己的名称。
  • 是的,这在管理员之外。因此该系统的用户可以更改自己的密码。对不起,我是 django/python 的新手,你如何更改名称?我真正想做的是有一个允许用户更改密码的表单。有一些更简单/正确的方法吗?我应该创建一个自定义表单来提交新密码吗?这仍然不适合我。
  • 好吧,你也可以只激活后台后台并允许用户在那里更改密码...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多