Как зарегистрироваться в качестве администратора в приложении 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

Вернуться на верх