微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

django RecursionError:调用Python对象时超出最大递归深度

如何解决django RecursionError:调用Python对象时超出最大递归深度

我已经通过在django rest框架中构建自定义用户模型来实现成员资格。顺便说一句,当您编写代码并运行服务器时,会发生以下错误

RecursionError:调用a时超出了最大递归深度 Python对象

这里是完整的追溯

Traceback (most recent call last):   File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\core\handlers\exception.py",line 34,in inner
    response = get_response(request)   File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\core\handlers\base.py",line 115,in _get_response
    response = self.process_exception_by_middleware(e,request)   File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\core\handlers\base.py",line 113,in _get_response
    response = wrapped_callback(request,*callback_args,**callback_kwargs)   File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\views\decorators\csrf.py",line 54,in wrapped_view
    return view_func(*args,**kwargs)   File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\views\generic\base.py",line 71,in view
    return self.dispatch(request,*args,**kwargs)   File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_framework\views.py",line 505,in dispatch
    response = self.handle_exception(exc)   File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_framework\views.py",line 465,in handle_exception
    self.raise_uncaught_exception(exc)   File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_framework\views.py",line 476,in raise_uncaught_exception
    raise exc   File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_framework\views.py",line 502,in dispatch
    response = handler(request,**kwargs)   File "D:\school\대회 및 프로젝트\CoCo\api\views.py",line 16,in post
    serializer.save()   File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\rest_framework\serializers.py",line  212,in save
    self.instance = self.create(validated_data)   File "D:\school\대회 및 프로젝트\CoCo\api\serializers.py",line 61,in create
    return User.objects.create_user(**validate_data)   File "D:\school\대회 및 프로젝트\CoCo\api\models.py",line 29,in create_user
    user = self.create_user(   File "D:\school\대회 및 프로젝트\CoCo\api\models.py",in create_user
    user = self.create_user(   [PrevIoUs line repeated 951 more times]   File "D:\school\대회 및 프로젝트\CoCo\api\models.py",line 31,in create_user
    email=self.normalize_email(email),File "D:\school\대회 및 프로젝트\CoCo\venv\lib\site-packages\django\contrib\auth\base_user.py",line 25,in normalize_email
    email_name,domain_part = email.strip().rsplit('@',1) RecursionError: maximum recursion depth exceeded while calling a Python object [20/Aug/2020 09:55:57] "POST /auth/signUp HTTP/1.1" 500 3947748

我可以知道如何解决错误吗?这是我的代码

models.py

from django.contrib.auth.models import (BaseUserManager,AbstractBaseUser,PermissionsMixin)
from django.db import models
from django.utils import timezone

class UserManager (BaseUserManager) :
    def create_user (self,username,email,profile,password=None) :

        if username is None :
            raise TypeError('Users should have a username')

        if email is None :
            raise TypeError('Users should have a email')

        user = self.model(
            username=username,email=self.normalize_email(email),profile=profile,)
        
        user.set_password(password)
        user.save()
        return user

    def create_user (self,password=None) :

        if password is None :
            raise TypeError('Password should not be none')

        user = self.create_user(
            username=username,password=password
        )
            
        user.create_user(username,password)
        user.is_superuser = True
        user.is_staff = True
        user.save()
        return user

class User (AbstractBaseUser,PermissionsMixin) :
    username = models.CharField(max_length=255,unique=True,db_index=True)
    email = models.CharField(max_length=255,db_index=True)
    profile = models.ImageField(default='media\default_image.jpeg')
    is_verified = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_Now_add=True)
    updated_at = models.DateTimeField(auto_Now=True)

    USERNAME_FIELD = 'email'
    required_FIELDS = ['username','profile']

    objects = UserManager()

    def __str__ (self) :
        return self.email

serializers.py

from .models import User
from django.contrib.auth.hashers import make_password
from rest_framework import serializers
from rest_framework_simplejwt.serializers import TokenObtainPairserializer,TokenRefreshSerializer
from rest_framework_simplejwt.tokens import RefreshToken
from allauth.account import app_settings as allauth_settings
from allauth.utils import email_address_exists
from allauth.account.adapter import get_adapter
from allauth.account.utils import setup_user_email
from django.utils.translation import ugettext_lazy as _
from datetime import datetime,timedelta

class Base64ImageField (serializers.ImageField) :

    def to_internal_value (self,data) :
        from django.core.files.base import ContentFile
        import base64
        import six
        import uuid

        if isinstance(data,six.string_types):
            if 'data:' in data and ';base64,' in data:
                header,data = data.split(';base64,')

            try:
                decoded_file = base64.b64decode(data)
            except TypeError:
                self.fail('invalid_image')

            file_name = str(uuid.uuid4())[:12]
            file_extension = self.get_file_extension(file_name,decoded_file)
            complete_file_name = "%s.%s" % (file_name,file_extension,)
            data = ContentFile(decoded_file,name=complete_file_name)

        return super(Base64ImageField,self).to_internal_value(data)

    def get_file_extension (self,file_name,decoded_file) :
        import imghdr

        extension = imghdr.what(file_name,decoded_file)
        extension = "jpg" if extension == "jpeg" else extension

        return extension

class customregisterSerializer (serializers.ModelSerializer) :
    password = serializers.CharField(max_length=68,min_length=6,write_only=True)
    profile = Base64ImageField(use_url=True)
    
    class Meta :
        model = User
        fields = ['email','username','profile','password']

    def validate (self,attrs) :
        email = attrs.get('email','')
        username = attrs.get('username','')
        profile = attrs.get('profile','')

        return attrs
        
    def create (self,validate_data) :
        return User.objects.create_user(**validate_data)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。