django - “str”对象没有“已验证”属性
问题描述
我在我的 twilio 项目中加入了 OTP。但是在验证电话号码时会引发以下错误。
phone.verified = True
AttributeError: 'str' object has no attribute 'verified'
模型.py
class User(AbstractBaseUser, PermissionsMixin):
phone = models.CharField(max_length=15, unique=True)
is_active = models.BooleanField(default = True)
is_staff = models.BooleanField(default = False)
USERNAME_FIELD = 'phone'
key = models.CharField(max_length=100, unique=True, blank=True)
verified = models.BooleanField(default=False)
objects = UserManager()
视图.py
@api_view(['GET'])
def send_sms_code(request, format=None):
time_otp = pyotp.TOTP(request.user.key, interval=10000)
time_otp = time_otp.now()
user_phone_number = request.user.phone
client.messages.create(
body="Your verification code is "+time_otp,
from_=twilio_phone,
to=user_phone_number
)
return Response(status=200)
@api_view(['GET'])
def verify_phone(request, sms_code, format=None):
code = int(sms_code)
if request.user.authenticate(code):
phone = request.user.phone
phone.verified = True
phone.save()
return Response(dict(detail = "Phone number verified successfully"),status=201)
return Response(dict(detail='The provided code did not match or has expired'),status=200)
它向我发送了一个验证码,但是当我要验证它时它无法正常工作。我知道问题出在哪里,但我该如何解决?任何帮助,将不胜感激!预先感谢!
解决方案
您的 api 视图设置 phone =request.user.phone
这是一个字符串。User
然后,您可以通过访问其上已验证的属性来将 phone 当作一个对象来使用。相反,您的观点应该是:
@api_view(['GET'])
def verify_phone(request, sms_code, format=None):
...
if request.user.authenticate(code):
user = request.user # set user as a User object.
user.verified = True
user.save()
return Response(...)
return Response(...)
看起来您甚至没有使用 phone 变量,因此您实际上并不需要它与您提供给我们的信息。
推荐阅读
- list - 如何将列表列表与列表列表结合起来
- node.js - 将 Auth0 集成到 Node & Express 应用程序中
- performance - 警报优先级 - 100% 离线生产主机与环境警报(100% 的 cab 硬件过热)
- python - 如何以几乎相等的方式将列表拆分为两个子列表?
- python - 用 cv2 覆盖两个图像会导致噪声
- excel - Excel Sumif 公式
- javascript - Span HTML 元素的行为类似于画布线 (x1,y1,x2,t2)
- r - 为热图上的连续发散色标设置中点
- c# - 为什么我不能在 index.cshtml.cs 中引用 PaginatedList.cs?
- powerbi - 切片器值的 DAX 度量或计算列