如何从管理界面重置用户密码

Osc*_*ros 7 django django-admin django-authentication

在我的网站上,我想让管理员重置任何用户的密码.

使用重置,我的意思是password_reset视图的确切功能(在contrib.auth下):发送一个确认链接到该用户电子邮件.

这样做的最好方法是什么?是否已有一个app/snippet可以做到这一点?

编辑:

假设用户john是管理员.我想要的是让john通过管理界面重置任何用户的密码.例如,要重置最大密码,他只需转到最大用户,然后单击任何链接以重置其密码.

Osc*_*ros 8

我最后做的是添加一个自定义ModelAdmin:

from django.contrib.auth.forms import PasswordResetForm
from django.contrib.auth.admin import UserAdmin


class CustomUserAdmin(UserAdmin):
    ...
    def reset_password(self, request, user_id):
        if not self.has_change_permission(request):
            raise PermissionDenied
        user = get_object_or_404(self.model, pk=user_id)

        form = PasswordResetForm(data={'email': user.email})
        form.is_valid()

        form.save(email_template_name='my_template.html')
        return HttpResponseRedirect('..')

    def get_urls(self):
        urls = super(UserAdmin, self).get_urls()

        my_urls = patterns('',
            (r'^(\d+)/reset-password/$',
                     self.admin_site.admin_view(self.reset_password)
            ),
        )
        return my_urls + urls
Run Code Online (Sandbox Code Playgroud)

我还必须覆盖change_form.html模板,如下所示:

{% extends "admin/change_form.html" %}
{% load i18n %}
{% block object-tools %}
    {% if change %}{% if not is_popup %}
        <ul class="object-tools">
            {# You can also give a name to that pattern and refer to it below using 'url' #}
            <li><a href="reset-password/" class="historylink">Reset password</a></li>

            <li><a href="history/" class="historylink">{% trans "History" %}</a></li>
            {% if has_absolute_url %}
                <li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">
                    {% trans "View on site" %}</a>
                </li>
            {% endif%}
        </ul>
    {% endif %}{% endif %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

结果如下:

在Django中从管理员重置密码

如果你想要更详细的解释,我在博客上写了这篇文章.

  • +1,你提出反馈很好.但是请在你的答案的正文中加上它的摘要,否则帖子不会受到你的博客结束的保护,加上感觉就像交通瞎了. (4认同)