只是嘗試將重繪 令牌從 Google OAuth 2.0 保存到登錄的 abstractuser 組態檔中。它正確顯示重繪 令牌和用戶。但是,當用戶登錄時,模型中沒有存盤重繪 令牌。
管道.py:
from .models import Profile
def save_token(user,*args,**kwargs):
extra_data = user.social_auth.get(provider="google-oauth2").extra_data
print(extra_data["refresh_token"],user)
Profile.objects.get_or_create(
username=user, defaults={"refresh_token": extra_data["refresh_token"]}
)
模型.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class Profile(AbstractUser):
refresh_token = models.CharField(max_length=255, default="")
現在顯示它時,它是空的。
日歷.html:
{% block content %}
{{user.refresh_token}}
<h1>Calendar</h1>
<button> </button>
<ul>
{% for result in results %}
<li>{{result.start.date}}{% if result.end.date %}-{% endif%}{{result.end.date}}: {{result.summary}}</li>
{% endfor %}
</ul>
{% endblock %}
uj5u.com熱心網友回復:
queryset 方法get_or_create不會更新模型中的值,如果它不存在,它只會創建一個新物件。如果您嘗試更新現有物件中的值,您應該使用get_or_create回傳的第二個值來確認它已經存在并進行必要的更新。
所以調整看起來像這樣:
def save_token(user,*args,**kwargs):
extra_data = user.social_auth.get(provider="google-oauth2").extra_data
profile, created = Profile.objects.get_or_create(
username=user, defaults={"refresh_token":
extra_data["refresh_token"]}
)
# `created` will be false if the object exists
if not created:
profile.refresh_token = extra_data["refresh_token"]
profile.save()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/428151.html
標籤:django heroku 谷歌日历 API 蟒蛇社会身份验证
