7

私のウェブサイトでは、管理者に任意のユーザーのパスワードをリセットさせたいと思っています。

リセットpassword_resetとは、ビューが何をするかを正確に意味します( contrib.authの下):そのユーザーの電子メールに確認リンクを送信します。

それを行う最良の方法はどのようになりますか?それを行うアプリ/スニペットはすでにありますか?

編集:

ユーザーjohnが管理者であると仮定しましょう。私が欲しいのは、管理インターフェースを介してjohnにユーザーのパスワードをリセットさせることです。たとえば、最大パスワードをリセットするには、最大ユーザーに移動し、任意のリンクをクリックしてパスワードをリセットします。

4

3 に答える 3

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

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 %}

結果は次のようになります。

Djangoの管理者からパスワードをリセットします

より詳細な説明が必要な場合は、ブログに投稿しました

于 2012-05-15T07:50:19.417 に答える
2

passresetアプリは、urls.pyを介してdjangoビューを公開し、ログインテンプレートを調整して「パスワードを忘れた」リンクを表示します。

組み込みのdjangoパスワードリセットビューとテンプレートは、自己リセットを目的としています。リセットフォームには別のユーザーのメールアドレス(クエリ文字列内)が事前に入力されている可能性がありますが、メールテンプレートの変更などの調整が必要です-「パスワードをリクエストしたため、このメールを受信して​​いますユーザーアカウントのリセット」はおそらくあなたが望むものではありません:

https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/templates/registration/password_reset_email.html

したがって、セルフリセットも含める場合は、さまざまなURLでビューを公開する必要があります。次のように、djangoビューをurls.pyにフックします。

urlpatterns += patterns('django.contrib.auth.views', 
    url(r'^accounts/password/reset/$',
        'password_reset',
        name='password-reset'), 
    url(r'^accounts/password/reset/done/$',
        'password_reset_done',
        name='password-reset-done'), 
    url(r'^accounts/password/reset/confirm/(?P<uidb36>[-\w]+)/(?P<token>[-\w]+)/$',
        'password_reset_confirm',
        name='password-reset-confirm'), 
    url(r'^accounts/password/reset/complete/$',
        'views.password_reset_complete',
        name='password-reset-complete')
)

調整を行う場合は、たとえば独自のメールテンプレートを渡します。

url(r'^/accounts/password/reset/$',
    'password_reset',
    {'email_template_name': 'my_templates/password_reset_email.html'}
    name='password-reset'),

「password_reset」ビューには、微調整できるパラメーターがさらにあります 。https : //docs.djangoproject.com/en/dev/topics/auth/#module-django.contrib.auth.views(「post_reset_redirect」は別のパラメーターとして思い浮かびますあなたの目的のために)

対応するリンクを表示するには、ユーザー管理者(注意して、すでに登録されています-登録を解除してから、独自のサブクラス化された追加のリンクフィールドを登録します)またはchange_formテンプレート自体を変更します。

私はこれをすぐに使えるアプリを知らないので、質問に賛成しました:-)。

于 2012-04-26T00:57:12.443 に答える
0

うん、そのためのアプリがあります。ここをチェックしてください:

https://github.com/bendavis78/django-passreset

于 2012-04-24T16:42:14.927 に答える