Единственная проблема, которую я вижу, это то, что пароли не хешируются.
Потому что нигде вы не указываете это. Вы можете переопределить метод form_valid
. Если вы используете UserCreationForm
[Django -doc] , тогда он автоматически хеширует пароль, а также использует два поля пароля, которые проверяют, совпадают ли пароли, и представляют пароли в поле пароля.
Таким образом, вы можете получить sh его, переопределив form_valid(…)
[Django -doc] :
class UserCreateView(LoginRequiredMixin, CreateView):
template_name = 'users/users_form.html'
model = User
fields = [
'username', 'password', 'is_superuser', 'is_staff',
'first_name', 'last_name', 'email', 'is_active'
]
success_url = reverse_lazy('users:list_users')
def form_valid(self, form):
form.instance.<b>set_password(</b>form.cleaned_data['password']<b>)</b>
super().form_valid(form)
или мы можем использовать UserCreationForm
:
from django.contrib.auth.forms import UserCreationForm
class UserCreateView(LoginRequiredMixin, CreateView):
template_name = 'users/users_form.html'
model = User
<b>form_class = UserCreationForm</b>
success_url = reverse_lazy('users:list_users')
Вы можете включить дополнительные поля, переопределив форму и определив дополнительные поля:
# app/forms.py
from django.contrib.auth.forms import UserCreationForm, UsernameField
from django.contrib.auth.models import User
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = User
<b>fields</b> = (
'username', 'is_superuser', 'is_staff', 'first_name', 'last_name',
'email', 'is_active'
<b>)</b>
field_classes = {'username': UsernameField}
, а затем используйте эту форму в своем представлении:
# app/views.py
from app.forms import CustomUserCreationForm
class UserCreateView(LoginRequiredMixin, CreateView):
template_name = 'users/users_form.html'
model = User
<b>form_class = CustomUserCreationForm</b>
success_url = reverse_lazy('users:list_users')
Однако включение полей is_superuser
может оказаться не очень хорошей идеей, поскольку это может привести к эскалации привилегий [wiki ] где обычный пользователь может создать пользователя-администратора (здесь вы ограничиваете его только зарегистрированными пользователями) и, таким образом, в конечном итоге получает больше привилегий.