Django. Python 社会认证. 在管道末尾创建个人资料.

2024-05-09 13:39:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在auth管道的末尾添加一个函数,这个函数的作用是检查是否有该用户的“Profiles”表,如果没有,它将创建一个表。 Profiles模型是一个表,我在其中存储有关用户的一些额外信息:

class Profiles(models.Model):
    user = models.OneToOneField(User, unique=True, null=True)
    description = models.CharField(max_length=250, blank=True, null=True)
    points = models.SmallIntegerField(default=0)
    posts_number = models.SmallIntegerField(default=0)

每个用户都必须有一个Profiles表。所以,我在管道的末尾添加了一个函数:

^{pr2}$

我得到了一个错误:

 KeyError at /complete/facebook/
 'details'
 ...
 utils.py in create_profile
 username = kwargs['details']['username']

我是python社交认证的新手,看来我遗漏了一些显而易见的东西。任何帮助都将不胜感激。在


Tags: 函数用户模型auth信息truedefault管道
1条回答
网友
1楼 · 发布于 2024-05-09 13:39:56

好吧,我会回答我自己的问题,以防将来对别人有用。我不是专家,但这是:

我在听this教程,因为他是这样做的

 email = kwargs['details']['email']

我以为我能做到

^{pr2}$

但没用,给了我一个键错误。在

然后我试着:

username = details['username']

而且成功了。但是我遇到了一个新问题,details dict中的用户名类似于u'Firstname Lastname',当我试图获取User对象时

user_object = User.objects.get(username=username)

找不到,因为用户模型中的用户名是u'FirstnameLastname'(没有空格)。在

最后,我再次阅读了文档,发现我可以直接使用user对象,它作为“user”传递给函数:

def create_profile(strategy, details, response, user, *args, **kwargs):

    if Profiles.objects.filter(usuario=user).exists():
        pass
    else:
        new_profile = Profiles(user=user)
        new_profile.save()

    return kwargs

相关问题 更多 >