Автоматическое создание нового пользователя для новых участников в django - PullRequest
2 голосов
/ 25 февраля 2020

Я пытаюсь разработать мультитенантные веб-приложения с использованием пакетов tenant-schema . Все работает нормально, здесь не хватает одной вещи, которая автоматически создает нового пользователя для новых арендаторов. Я знаю, что мы можем создать нового суперпользователя с помощью этой команды

python manage.py tenant_command createsuperuser --schema=schema_name

Но я хочу автоматически создать нового пользователя на основе информации, предоставленной пользователем

Здесь я создаю арендаторов с использованием API ,

api_view.py

    def post(self, request):
        serializer = ClientSerializer(data=request.data)
        if serializer.is_valid():
            try:
                serializer.save()
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            except Exception as e:
                return Response({'info': 'Unable to create tenant'})
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Модель для арендаторов

class Client(TenantMixin):
    name = models.CharField(max_length=100)
    paid_until = models.DateField()
    on_trial = models.BooleanField()
    created_on = models.DateField(auto_now_add=True)
    auto_create_schema = True

serializers.py

from rest_framework import serializers

from .models import Client


class ClientSerializer(serializers.ModelSerializer):
    class Meta:
        model = Client
        fields = ['id', 'domain_url', 'schema_name', 'name', 'paid_until', 'on_trial', 'created_on']

Здесь я хочу автоматически создать нового суперпользователя. Я не знал, как это сделать, любое предложение будет оценено.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вы можете использовать django после сохранения сигналов .

Например, в models.py:

from django.dispatch import receiver
from tenant_schemas.utils import tenant_context
from django.contrib.auth.models import User

@receiver(post_save, sender=Client):
def create_superuser(instance, **kwargs):
  if 'created' in kwargs: # tests if this client was created
    tenant=instance
    with tenant_context(tenant):
    # Create the superuser by using the new client tenant schema
      User.objects.create_user(
        # insert your user data here
      )
1 голос
/ 25 февраля 2020

Таким образом, вам нужно создать нового пользователя на основе информации, предоставленной пользователем на странице HTML. Для этого вам нужно создать страницу html для получения информации с кнопкой отправки. После нажатия кнопки «Отправить» для создания нового пользователя можно использовать представленный ниже вид.

def createUser(request):
    if request.user.is_authenticated:
        if request.method == "POST":
            first_name = request.POST['first_name']
            last_name = request.POST['last_name']
            userName = request.POST['first_name']+request.POST['mobile_number']
            userMail = request.POST['email']
            if userName and userMail and last_name and first_name:
                   u, created = User.objects.get_or_create(email=userMail, 
                   first_name=first_name, last_name=last_name, defaults={'username': userName})
               if created:
                   print('user created')
                   return render(request, 'Success.html', {'message': 'User Created Successfully.'})
               else:
                   return render(request, 'index.html', {'message': 'User has not been created.'})
            else:
                return render(request, 'index.html', {'message': 'Please provide all the detail.'})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...