gpt4 book ai didi

python - UNIQUE 约束失败 : auth_user. 用户名

转载 作者:行者123 更新时间:2023-11-28 17:21:32 24 4
gpt4 key购买 nike

我正在尝试将名字和姓氏直接从 Facebook API 存储到用户身份验证模型(使用 FacebookProfile 模型进行扩展,包含 webpull、id 和 year_formed)

模型.py

class FacebookProfile(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE)


id = models.PositiveIntegerField(primary_key = True)
#name = models.CharField(max_length = 200, null = True)
year_formed = models.PositiveIntegerField(default = 0)
webpull= models.CharField(max_length =1000, null = True)

Views.py

if request.method == 'GET':
print 'im here'

return render(request, "logV2.html")
if request.method == "POST":
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
print first_name, last_name

facebook_user = FacebookUserForm(data=request.POST)
facebook_profile = FacebookProfileForm()

has_account = authenticate(first_name = first_name, last_name = last_name)

if has_account:
print 'this has account'
login(request, has_account)
return HttpResponseRedirect('/music/home/')
else:
id_ = request.POST.get('id')
birthday = request.POST.get('year_formed')
webpull = request.POST.get('webpull')

if birthday == "undefined":
print 'im emplty'
year_formed = random.randint(1993,1998)
else:
year_formed = re.findall(r"[0-9][0-9][0-9][0-9]$", birthday)[0]

print id_, year_formed, webpull

print facebook_user

user = facebook_user.save()
profile = facebook_profile.save(commit = False)
profile.user = user
profile.webpull = webpull
profile.id = id_

## steal birtday fucntion from log
# move to new database facebook (neeed to change all artists to facebookprofile)
profile.year_formed = year_formed
profile.save()



#authenticate user. then log him in.
#user = authenticate(username = profile.user.username)
now_has_account = authenticate(first_name = first_name, last_name = last_name)
login(request, now_has_account)


#profile.save()
return HttpResponseRedirect('/music/home/')

在 View 中,代码在 user = facebook_user.save() 停止

我尝试清除整个数据库,

还有

我从 html 中收到的是一个带有 first_name、last_name、id、year_formed、webpull 的表单。数据顺利到达后端。

Forms.py

class FacebookUserForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name')

class FacebookProfileForm(forms.ModelForm):
class Meta:
model = FacebookProfile
fields = ('id', 'year_formed', 'webpull',)

我在验证什么Auth_Backend.py

class OnlynameandsurnameAuth(ModelBackend):
def authenticate(self, first_name = None, last_name = None):
try:
return User.objects.get(first_name = first_name, last_name = last_name)
except:
return None

然后auth.py

admin.site.register(FacebookProfile)

后台认证settings.py

AUTHENTICATION_BACKENDS = (
# ... your other backends
#'music.auth_backend.PasswordlessAuthBackend',
'music.auth_backend.OnlynameandsurnameAuth',
)

关于如何在不出现 UNIQUE 错误的情况下保存 first_name 和 last_name 有什么想法吗?

谢谢! :D

最佳答案

如果您使用不提供密码的默认身份验证功能,应该总是(?)失败,这意味着

has_account = authenticate(first_name = first_name, last_name = last_name)

永远是无。

但主要问题是您没有为新用户设置用户名,只有名字和姓氏。这将工作一次,但在创建一个用户名为空的用户后,下一次尝试将失败,因为用户需要一个唯一的用户名。所以:添加用户名!

除此之外,我认为

user = facebook_user.save()

不将用户分配给“用户”,而是分配给表单。您应该使用 facebook_user.instance。

关于python - UNIQUE 约束失败 : auth_user. 用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41313621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com