Я работаю над проектом с использованием Python (3.7) и Django (2.1), в котором мне нужно создать профиль пользователя при создании пользователя.
Вот что я попробовал:
С models.py
:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.CharField(max_length=500, null=True)
about = models.CharField(max_length=1000, null=True)
slogan = models.CharField(max_length=500, null=True)
profile_pic = models.FileField(upload_to='media/profile_pics', null=True)
def __str__(self):
return self.user.username
С signals.py
:
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, instance, created, **kwargs):
instance.profile.save()
С urls.py
:
path('register/', views.RegisterUser.as_view(), name='register'),
С views.py
:
def post(self, request, *args, **kwargs):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
messages.success(request, f'Account has been created for {username}!')
form.save()
return HttpResponseRedirect(reverse_lazy('login'))
else:
form = UserRegisterForm()
return render(request, 'users/register.html', {'form': form})
С forms.py
:
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ('username', 'email', 'first_name',
'last_name', 'password1', 'password2')
С apps.py
:
class JobexpertappConfig(AppConfig):
name = 'jobexpertapp'
app_label = 'jobexpertapp'
def ready(self):
import jobexpertapp.signals
Обновление: Я также использую аутентификацию facebook на своем сайте, используя django-social-auth
и для полученияаватар на фейсбуке, я реализовал 2 вещи, (а) определил social_auth_pipeline.py
(б): добавить SOCIAL_AUTH_PIPELINE
в settings.py
:
Итак,
С social_auth_pipeline.py
:
def save_avatar(backend, user, response, *args, **kwargs):
try:
profile = Profile.objects.get(user_id=user.id)
except Profile.DoesNotExist:
profile = Profile(user_id=user.id)
if backend.name == 'facebook':
profile.avatar = 'http://graph.facebook.com/{}/picture?type=large'.format(response['id'])
profile.save()
С settings.py
:
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'social.pipeline.user.get_username',
'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
# 'apps.users.pipeline.get_avatar',
'jobexpertapp.social_auth_pipeline.save_avatar',
)
Когда я создаю новую учетную запись через страницу регистрации, она создаетuser
но не профиль.Также не удалось найти ошибку на консоли при создании пользователя.Что тут может быть не так?
Заранее спасибо!