【发布时间】:2019-01-28 06:06:30
【问题描述】:
我正在使用 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
更新: 我还在我的网站上通过使用
django-social-auth使用facebook 身份验证并获取facebook 头像,我已经实现了两件事,(a)定义social_auth_pipeline.py(b):在settings.py中添加SOCIAL_AUTH_PIPELINE:
所以,
来自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,但不会创建个人资料。
此外,在创建用户的控制台上找不到任何错误。
这里有什么问题?
提前致谢!
【问题讨论】:
-
你的signals.py调用了吗?
-
是的,在
apps.py我在ready函数里面有import。 -
尝试从
save_profile中删除@receiver(post_save, sender=User) -
嗨@ShafikurRahman,还是不行!
-
试试这个
def save_profile(sender, instance, **kwargs): instance.profile.save()或者你可以检查终端是否显示任何日志?
标签: python django python-3.x django-models django-2.0