Как скрыть пароль в панели администратора при создании нового пользователя?
Я столкнулся с проблемой в панели администратора моего приложения. При создании нового пользователя и задании пароля пароль отображается в виде обычного текста.
Вот краткое описание проблемы:
- Перейдите в панель администратора.
- Выберите опцию создания нового пользователя.
- Введите пароль для нового пользователя.
Ожидаемое поведение: Пароль должен быть скрыт и отображаться в виде точек или звездочек (например, ********).
Фактическое поведение: Пароль отображается открытым текстом, что создает угрозу безопасности.
Может ли кто-нибудь подсказать мне, как изменить панель администратора так, чтобы пароль не отображался открытым текстом?
Это тоже не помогло Ссылка
admin.py
from django.contrib import admin
from django.contrib.auth.hashers import make_password
from user import models
class UserAdmin(admin.ModelAdmin):
"""Define the admin pages for users."""
ordering = ['id']
list_display = ['id', 'email', 'name']
search_fields = ['id', 'name', 'email']
readonly_fields = ['last_login']
def save_model(self, request, obj, form, change):
obj.password = make_password(obj.password)
obj.user = request.user
obj.save()
# Register your models here.
admin.site.register(models.User, UserAdmin)
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.hashers import make_password
from user import models
class CustomUserAdmin(BaseUserAdmin):
"""Customize the admin pages for users."""
ordering = ['id']
list_display = ['id', 'email', 'name']
search_fields = ['id', 'name', 'email']
readonly_fields = ['last_login']
def save_model(self, request, obj, form, change):
if obj.password:
obj.password = make_password(obj.password)
obj.user = request.user # Assuming you have a 'user' field on your model
obj.save()
# Register your models here.
admin.site.register(models.User, CustomUserAdmin)
then
<input type="password" name="password" id="id_password">
Используйте виджет PasswordInput для поля формы пароля.
Например, вот фрагмент формы создания пользователя django.contrib.auth
:
class BaseUserCreationForm(forms.ModelForm):
"""
A form that creates a user, with no privileges, from the given username and
password.
"""
error_messages = {
"password_mismatch": _("The two password fields didn’t match."),
}
password1 = forms.CharField(
label=_("Password"),
strip=False,
widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}),
help_text=password_validation.password_validators_help_text_html(),
)
password2 = forms.CharField(
label=_("Password confirmation"),
widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}),
strip=False,
help_text=_("Enter the same password as before, for verification."),
)
Я не пробовал, но, возможно, вы можете использовать django.contrib.auth
непосредственно в своем приложении (не забудьте прочитать документацию по jango). Возможно, что-то вроде этого:
# forms.py
from django.contrib.auth.forms import UserCreationForm
from user import models
class MyUserCreationForm(UserCreationForm):
class Meta:
model = models.User
# admmin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from user import models
from .forms import MyUserCreationForm
@admin.register(models.User)
class MyUserAdmin(UserAdmin):
"""Define the admin pages for users."""
ordering = ['id']
list_display = ['id', 'email', 'name']
search_fields = ['id', 'name', 'email']
readonly_fields = ['last_login']
add_form = MyUserCreationForm