Как зарегистрироваться в качестве администратора в приложении Django с помощью Registration Model и Views.py?
Я знаком с созданием superuser в Django App с помощью команды python manage.py createsuperuser в терминале. Я также знаком с созданием суперпользователя с помощью Python Shell.
Но я хочу знать, как зарегистрировать пользователя в качестве администратора в Django App, используя RegistrationModel и views.py? Или, более конкретно, как зарегистрировать пользователя и изменить его статус на staff или superuser в views.py?
Спасибо, что задали этот вопрос, он помог мне проверить свою уверенность в настройке встроенных модулей django. Найдите ниже решение данной задачи.
ШАГ ПЕРВЫЙ
После создания и активации виртуальной среды Давайте создадим наш новый проект (аутентификация) и новое приложение (пользователи) с помощью следующей команды
$ django-admin startproject authentication .
$ python manage.py startapp users
Далее мы добавляем приложение users в installed_apps в authentication/settings.py файл
ШАГ ВТОРОЙ
Мы создаем модель CustomUser в нашем users/urls.py файле
#users/urls.py
from django.contrib.auth.models import AbstractUser
from django.urls import reverse
class CustomUser(AbstractUser):
pass
def get_absolute_url(self):
return reverse("login_page", args=[str(self.id)])
Для того чтобы предупредить django об использовании модели CustomUser для аутентификации, мы добавляем AUTH_USER_MODEL = 'users.CustomUser' в наш authentication/settings.py файл
ШАГ ТРЕТИЙ
Создайте новый файл forms.py в приложении users и добавьте следующее
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = CustomUser
fields = [
'first_name',
'last_name',
'username',
'email',
'password1',
'password2',
'is_staff',
'is_superuser',
]
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = UserChangeForm.Meta.fields
ШАГ ЧЕТВЕРТЫЙ
Поскольку мы настроили наши UserCreationForm и UserChangeForm, мы должны обновить в нашем users/admin.py файл
from django.contrib import admin
from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser
from django.contrib.auth.admin import UserAdmin
class CustomUserAdmin(UserAdmin):
model = CustomUser
add_form = CustomUserCreationForm
form = CustomUserChangeForm
list_display = [
'first_name',
'last_name',
'email',
'is_staff',
'is_superuser',
]
admin.site.register(CustomUser, CustomUserAdmin)
ШАГ ЧЕТВЕРТЫЙ
Мы можем перейти к созданию миграций и переносу таблиц в базу данных с помощью команды
$ python manage.py makemigrations
$ python manage.py migrate
ШАГ ПЯТЫЙ
Создайте шаблон для создания новых пользователей. Мы создаем новую папку (templates) в нашем родительском dir, где мы можем хранить наши html файлы и создаем новый файл create_new.html в папке templates
Команда для этого:
$ mkdir templates
$ touch templates/create_new.html
Обновление настроек шаблонов
# authentication/settings.py
TEMPLATES:
'DIRS': [BASE_DIR/'templates'] # new
Добавьте следующее в файл templates/create_new.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-
scale=1.0">
<title>New admin</title>
</head>
<body>
<form method="post">
{% csrf_token %} {{ form.as_p }}
<input type="submit" value="Create new user" />
</form>
</body>
</html>
ШАГ ШЕСТОЙ
Создайте представление для отображения этого шаблона
# users/views.py
from django.views.generic.edit import CreateView
from .models import CustomUser
from .forms import CustomUserCreationForm
class UserCreateView(CreateView):
model = CustomUser
template_name = 'create_new.html'
form_class = CustomUserCreationForm
ШАГ СЕДЬМОЙ
Просмотр ссылки на определенный url
# authentication/urls.py
from django.contrib import admin
from django.urls import path, include # new
urlpatterns = [
path('admin/', admin.site.urls,),
path('', include('users.urls')), # new
]
#user/urls.py
from django.urls import path
from .views import UserCreateView
urlpatterns = [
path('', UserCreateView.as_view(), name='home'),
]
ШАГ ВОСЬМОЙ
Запустите локальный сервер и создайте нового пользователя для входа на админ-сайт. *Не требуется команда python manage.py createsuperuser
Счастливого кодирования!!! twitter: @salmanu_ridwan github: @salmanuridwan