django管理员行动

Tim*_*adu 3 django django-admin

嗨,我想从用户管理员中发送密码重置电子邮件并设置操作.

我无法确定是否可以使用password_reset视图.我可以使用视图循环查询集以生成令牌并发送电子邮件吗?

jpi*_*pic 5

  1. 子类UserAdmin,您可以从中导入它django.contrib.auth.admin

  2. 添加您添加的操作,通过对password_reset视图进行反向工程来使用PasswordResetForm.

  3. 从admin.site取消注册用户,admin.site.register(User)

  4. 将您的子类注册为用户的modeladmin

这是一个例子(感谢Chris Pratt推动使用取消注册/注册):

from django.contrib.auth.forms import PasswordResetForm
from django.contrib.auth.tokens import default_token_generator
from django.conf import settings
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class YourUserAdmin(UserAdmin):
    actions = list(UserAdmin.actions) + ['send_reset_password']

    def send_reset_password(modeladmin, request, queryset):
        for user in queryset:
            form = PasswordResetForm({'email': user.email})
            form.full_clean()
            form.save({
                'use_https': request.is_secure(),
                'token_generator': default_token_generator,
                'from_email': settings.DEFAULT_FROM_EMAIL,
                'email_template_name': 'registration/password_reset_email.html',
                'request': request
            })

admin.site.unregister(User)
admin.site.register(User, YourUserAdmin)
Run Code Online (Sandbox Code Playgroud)

  • 无论何时你修补了补丁,如果幕后代码发生变化,你就会打开奇怪的行为或错误.子类化和覆盖更安全. (3认同)