Сигналы Джанго (Разъяснение сомнений)

#django #django-models #django-rest-framework #django-templates

Вопрос:

Я новичок в Django и смотрю серию обучающих видеороликов, в которых мы делали проект … В сериале они говорят о «сигналах».

Что предлагается сделать, так это подключить некоторые сигналы во время регистрации пользователя на странице

views.py

 from django.shortcuts import render, redirect
from .models import *
from .forms import OrderForm, CustomerForm, CreateUserForm
from django.contrib import messages
from django.contrib.auth.models import Group
from django.contrib.auth.decorators import login_required
from .decorators import unauthenticated_user, allowed_users, admin_only

@unauthenticated_user
def registerPage(request):
    form_value = CreateUserForm
    if request.method == 'POST':
        form_value = CreateUserForm(request.POST)
        if form_value.is_valid():
            user = form_value.save()
            username = form_value.cleaned_data.get('username')
            messages.success(request, 'Account was create for {}'.format(username))
            return redirect('login')
        else:
            messages.warning(request, 'Data is invalid, please try again') 
    context = {'form_key':form_value}
    return render(request, 'accounts/register.html', context)
 

signals.py

 from django.db.models.signals import post_save
from django.contrib.auth.models import User, Group
from .models import Customer

def customer_profile(sender, instance, created, **kwagrs):
    if created:
        group = Group.objects.get(name='customer')
        instance.groups.add(group)
        Customer.objects.create(
                user = instance,
                name = instance.username
            )
        print('Profile created.!')

post_save.connect(customer_profile, sender= User)
 

apps.py

 from django.apps import AppConfig


class AccountsConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'accounts'
    def ready(self):
        import accounts.signals
 

settings.py

 INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'accounts',

    'django_filters',
]
 

Это мои вопросы:

  1. В чем заключается работа функции ‘ready()’ в ‘apps.py»?
  2. В учебнике предлагается разместить » учетные записи.приложения.Учетная запись» в «settings.py» файл конкретно в разделе «INSTALLED_APPS», необходимо ли его размещать?
  3. Другой метод, предложенный в учебнике, состоит в том, чтобы разместить default_app_config = ‘учетные записи.приложения.AccountsConfig» в файле «init.py» .. Что наиболее рекомендуется?

Использование этих сигналов кажется очень практичным для наилучшего развития функциональности проекта. Вот почему я хочу понять эти вещи как можно яснее, большое вам спасибо за вашу помощь

Комментарии:

1. Пожалуйста, не используйте сигналы: django-antipatterns.com/antipattern/signals.html