Как создать автоматический профиль пользователя в django

Как создать автоматический профиль пользователя? Есть ли способ создать автоматический профиль пользователя, когда пользователь заполнил регистрационную форму в django, например, в Stack Overflow. В Stack Overflow, когда новый пользователь создал аккаунт на Gmail, Facebook или Github, Stack Overflow создаст для него автоматический профиль пользователя, чтобы он мог редактировать его по своему усмотрению. Я знаю, как реализовать функцию редактирования с помощью UpdateView. Я просто хочу создать автоматический профиль пользователя, когда форма отправлена. могу ли я создать автоматический профиль пользователя в django, если да, то как?

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_image = models.ImageField(upload_to='avatar', blank=True, null=True)
    stories = RichTextField(blank=True, null=True)
    twitter = models.URLField(max_length=300, blank=True, null=True)
    website = models.URLField(max_length=300,blank=True, null=True)
    city = models.CharField(max_length=50, blank=True, null=True)
    location = models.CharField(max_length=80, blank=True, null=True)
    slug = models.SlugField(unique=True, max_length=200)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.user)
        super(Profile, self).save(*args, **kwargs)

    def __str__(self):
        return str(self.user)

просмотров моей регистрации пользователя:

def register(request):
    if request.method == 'POST':
        username = request.POST['username']
        first_name = request.POST['first_name']
        last_name = request.POST['last_name']
        email = request.POST['email']
        password = request.POST['password']
        password2 = request.POST['password2']

        if password == password2:
            if User.objects.filter(email=email).exists():
                messages.info(request, 'Email or user name Already taking')
                return redirect('register')
            elif User.objects.filter(username=username).exists():
                messages.info(request, 'username is taken')
                return redirect('register')
            else:
                user = User.objects.create_user(username=username, first_name=first_name, 
                last_name=last_name, email=email, password=password)
                user.save();
                return redirect('Home')
        else:
            messages.info(request, 'Password Not Match')
            return redirect('register')   
        return redirect ('/')     
    else:
        return render(request, 'signup.html')

Вам необходимо использовать Django Signals.

создайте файл signals.py

from django.conf import settings 
from django.db.models.signals import post_save
from django.dispatch import receiver
from . models import Profile

User = settings.AUTH_USER_MODEL

#this function wake up after a User object save
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

Итак, существует файл python signals.py, который будет обрабатывать все подобные вещи в фоновом режиме, вы должны узнать об этом файле, вместо того, чтобы пропустить эту часть, потому что она необходима, перейдите к документам django и узнайте больше об этом... https://docs.djangoproject.com/en/4.0/topics/signals/

@enes islam отвечает на ваш вопрос, если я буду делать это снова, поэтому мой комментарий будет бесполезен, поэтому у меня есть еще один маленький совет для вас, если вы не хотите создавать файл сигналов или импортировать в apps.py методом get ready, если вы хотите пропустить это, поэтому вы просто добавляете код сигналов в свои модели, поэтому вы не хотите импортировать в сигналы Я думаю, что этот комментарий будет полезен для всех, кто придет сюда через месяц или год....

в первый раз я принимаю ответ @enes islam, но он не работает, пока я не добавлю это в свой файл apps.py:

файл apps.py:

def ready(self):
    from . import signals

@enes islam ответ

Вам необходимо использовать Django Signals

создайте файл signals.py

 from django.conf import settings 
 from django.db.models.signals import post_save
 from django.dispatch import receiver
 from . models import Profile

 User = settings.AUTH_USER_MODEL

 #this function wake up after a User object save
 @receiver(post_save, sender=User)
 def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

В основном я не прочитал ваш вопрос с концентрацией и я думал, что вы хотите создать автоматический профиль пользователя с картинкой по умолчанию и полями по умолчанию извините за это Поэтому я отвечу на ваш вопрос правильно Вы говорите о системе социальной авторизации с помощью django Хорошо, первым делом вам нужно установить сторонний пакет

$ pip install django-allauth

затем добавьте это в каталог установленных приложений вашего проекта

INSTALLED_APPS = [
...
# 3rd party
"allauth",
"allauth.account",
"allauth.socialaccount",
# social providers
"allauth.socialaccount.providers.github",
"allauth.socialaccount.providers.twitter",
...

]

затем перейдите в каталог вашего проекта и добавьте это в файл settings.py

AUTHENTICATION_BACKENDS = (
    "allauth.account.auth_backends.AuthenticationBackend",
)

SITE_ID = 1
ACCOUNT_EMAIL_VERIFICATION = "none"
LOGIN_REDIRECT_URL = "home"
ACCOUNT_LOGOUT_ON_GET = True

Затем добавьте эту кнопку на страницу регистрации

<a href="{% provider_login_url 'twitter' %}" class="Your_custom_classes">
    <span>Login with Twitter</span>
</a>

Примечание: после завершения этого процесса, когда вы столкнетесь с проблемой, как no null contrained_id... просто удалите вашу базу данных dbsqlite, затем создайте другого суперпользователя, после этого вы не столкнетесь ни с какой проблемой

Надеюсь, это поможет вам

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