【问题标题】:get data from request when creating object in django rest framework在 django rest 框架中创建对象时从请求中获取数据
【发布时间】:2021-09-15 12:45:29
【问题描述】:

我正在尝试通过发送代码来验证电子邮件,这就是我解决问题的方式:我创建了一个名为 Email_for_Verification 的模型,其中包含两个字段(电子邮件、代码)代码是随机生成的,我创建了一个实例模型当用户输入他的电子邮件时,我将生成的代码发送到电子邮件中,在第二步中,用户输入接收到的代码,我将使用名为:Verify_code 的视图进行验证。但我遇到了一个错误。 在创建 Email_for_Verification 实例时尝试向用户发送电子邮件时遇到此错误

'Request' object has no attribute 'email'

这是我的代码

Views.py

class Verify_code(APIView):
    def post(self, request):
        data = request.data
        code = data.get('code')
        email = data.get('email')
        email_for_verification = models.Email_for_Verification.objects.get(email=email)
        if code == email_for_verification.code:
            return Response({"valid" : "Valid code", "email": email}, status=status.HTTP_200_OK)
        else :
            return Response({"invalid" : "Invalid code", "email": email}, status=status.HTTP_404_NOT_FOUND)
        
class EmailForVerificationView(CreateAPIView):
       class EmailForVerificationView(CreateAPIView):
        queryset = models.Email_for_Verification.objects.all()
        serializer_class = EmailForVerificationSerializer
        def create(self, request):
                    created = models.Email_for_Verification.objects.create(email=request.data['email']).save()


                    email=created.get('email')
                    code = created.get('code')
                    send_mail(
                    'Here is the code of verification',
                    code,
                    'dummy@mail.com',
                    [email],
                    fail_silently=True,
                )
                    return Response({"code" : code, "email": email}, status=status.HTTP_200_OK)

模型.py

def generate_activation_code():
    return int(''.join([str(random.randint(0,10)) for _ in range(6)]))

class Email_for_Verification(models.Model):
    email = models.EmailField(
        max_length=100, verbose_name='email', unique=True)
    code = models.CharField(max_length=6, default=generate_activation_code)

序列化器.py

class EmailForVerificationSerializer(serializers.ModelSerializer):
    class Meta:
            model = Email_for_Verification
            fields = '__all__'
            

【问题讨论】:

    标签: python django django-models django-rest-framework django-views


    【解决方案1】:
    created = models.Email_for_Verification.objects.create(email=request.email).save()
    

    应该是:

    created = models.Email_for_Verification.objects.create(email=request.data['email'])
    

    电子邮件字段在request.data 中发送,在request 中没有

    【讨论】:

    • 我编辑了代码请看一下我现在有以下错误'NoneType'对象没有属性'get'
    • 从该行中删除 save()。没必要
    • 同样的错误:'Email_for_Verification'对象没有属性'get'
    • Email_for_Verification 是模型实例,而不是字典。使用:email=created.email 而不是email=created.get('email'),同样适用于code
    猜你喜欢
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2016-06-04
    • 2013-11-07
    • 2020-02-29
    • 2019-06-14
    相关资源
    最近更新 更多