Django 无法在API中获取图像数据以及用于注册的json数据

Django 无法在API中获取图像数据以及用于注册的json数据,django,api,django-rest-framework,Django,Api,Django Rest Framework,我想创建一个注册API,在其中输入用户名、电子邮件、密码以及图像字段。我无法正确接收和处理数据。默认用户类已扩展为存储图像字段。 我有一个扩展用户模型:- from django.contrib.auth.models import User import os def get_upload_path(instance, filename): fileName, fileExtension = os.path.splitext(filename) return os.path.j

我想创建一个注册API,在其中输入用户名、电子邮件、密码以及图像字段。我无法正确接收和处理数据。默认用户类已扩展为存储图像字段。 我有一个扩展用户模型:-

from django.contrib.auth.models import User
import os
def get_upload_path(instance, filename):
    fileName, fileExtension = os.path.splitext(filename)
    return os.path.join("user_%s" % instance.user.username,"user_{0}.{1}" .format(instance.user.username,fileExtension))

# Create your models here.
class Userprofile(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    display_picture=models.ImageField(upload_to=get_upload_path)
    has_voted=models.BooleanField(default=False)
    voted_item=models.CharField(max_length=200,default='none')
    def __str__(self):
        return self.user.username
from django.contrib.auth.models import User
from .models import Userprofile

class UserprofileSerializer(serializers.ModelSerializer):
    class Meta:
        model=Userprofile
        fields=['display_picture']

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model=User
        fields=['username','email','password1','password2']
path('register',views.FileUploadView.as_view(),name='Register'),
@csrf_exempt
class FileUploadView(APIView):
    parser_classes=[MultiPartParser,FormParser]

    def register(self,request):
        display_picture=request.FILES["display_picture"]
        data=json.loads(request.data["data"])
        #saving data using serializers
        return JsonResponse({'message': "Registered Successfully!"},status=200)
这些是序列化程序:-

from django.contrib.auth.models import User
import os
def get_upload_path(instance, filename):
    fileName, fileExtension = os.path.splitext(filename)
    return os.path.join("user_%s" % instance.user.username,"user_{0}.{1}" .format(instance.user.username,fileExtension))

# Create your models here.
class Userprofile(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    display_picture=models.ImageField(upload_to=get_upload_path)
    has_voted=models.BooleanField(default=False)
    voted_item=models.CharField(max_length=200,default='none')
    def __str__(self):
        return self.user.username
from django.contrib.auth.models import User
from .models import Userprofile

class UserprofileSerializer(serializers.ModelSerializer):
    class Meta:
        model=Userprofile
        fields=['display_picture']

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model=User
        fields=['username','email','password1','password2']
path('register',views.FileUploadView.as_view(),name='Register'),
@csrf_exempt
class FileUploadView(APIView):
    parser_classes=[MultiPartParser,FormParser]

    def register(self,request):
        display_picture=request.FILES["display_picture"]
        data=json.loads(request.data["data"])
        #saving data using serializers
        return JsonResponse({'message': "Registered Successfully!"},status=200)
这是路径/url:-

from django.contrib.auth.models import User
import os
def get_upload_path(instance, filename):
    fileName, fileExtension = os.path.splitext(filename)
    return os.path.join("user_%s" % instance.user.username,"user_{0}.{1}" .format(instance.user.username,fileExtension))

# Create your models here.
class Userprofile(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    display_picture=models.ImageField(upload_to=get_upload_path)
    has_voted=models.BooleanField(default=False)
    voted_item=models.CharField(max_length=200,default='none')
    def __str__(self):
        return self.user.username
from django.contrib.auth.models import User
from .models import Userprofile

class UserprofileSerializer(serializers.ModelSerializer):
    class Meta:
        model=Userprofile
        fields=['display_picture']

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model=User
        fields=['username','email','password1','password2']
path('register',views.FileUploadView.as_view(),name='Register'),
@csrf_exempt
class FileUploadView(APIView):
    parser_classes=[MultiPartParser,FormParser]

    def register(self,request):
        display_picture=request.FILES["display_picture"]
        data=json.loads(request.data["data"])
        #saving data using serializers
        return JsonResponse({'message': "Registered Successfully!"},status=200)
这是视图:-

from django.contrib.auth.models import User
import os
def get_upload_path(instance, filename):
    fileName, fileExtension = os.path.splitext(filename)
    return os.path.join("user_%s" % instance.user.username,"user_{0}.{1}" .format(instance.user.username,fileExtension))

# Create your models here.
class Userprofile(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    display_picture=models.ImageField(upload_to=get_upload_path)
    has_voted=models.BooleanField(default=False)
    voted_item=models.CharField(max_length=200,default='none')
    def __str__(self):
        return self.user.username
from django.contrib.auth.models import User
from .models import Userprofile

class UserprofileSerializer(serializers.ModelSerializer):
    class Meta:
        model=Userprofile
        fields=['display_picture']

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model=User
        fields=['username','email','password1','password2']
path('register',views.FileUploadView.as_view(),name='Register'),
@csrf_exempt
class FileUploadView(APIView):
    parser_classes=[MultiPartParser,FormParser]

    def register(self,request):
        display_picture=request.FILES["display_picture"]
        data=json.loads(request.data["data"])
        #saving data using serializers
        return JsonResponse({'message': "Registered Successfully!"},status=200)
我收到的这篇文章说:-

路径('register',views.FileUploadView.as_view(),name='register'),
AttributeError:“function”对象没有属性“as_view”

您正在像函数一样装饰一个类,这就是代码被破坏的原因

要在类上使用装饰器,可以使用以下两种方法之一:

1) 装饰班级:

from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt

@method_decorator(csrf_exempt,name='dispatch')
class FileUploadView(APIView):
    parser_classes=[MultiPartParser,FormParser]
    def register(self,request):             

        display_picture=request.FILES["display_picture"] 
        data=json.loads(request.data["data"])         

        #saving data using serializers 
        return JsonResponse({'message': "Registered Successfully!"},status=200)
2) 仅在URL中装饰:

from django.views.decorators.csrf import csrf_exempt

path('register',csrf_exempt(view.FileUploadView.as_view()))

您可以详细阅读。

您正在像函数一样装饰一个类,这就是您的代码被破坏的原因

要在类上使用装饰器,可以使用以下两种方法之一:

1) 装饰班级:

from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt

@method_decorator(csrf_exempt,name='dispatch')
class FileUploadView(APIView):
    parser_classes=[MultiPartParser,FormParser]
    def register(self,request):             

        display_picture=request.FILES["display_picture"] 
        data=json.loads(request.data["data"])         

        #saving data using serializers 
        return JsonResponse({'message': "Registered Successfully!"},status=200)
2) 仅在URL中装饰:

from django.views.decorators.csrf import csrf_exempt

path('register',csrf_exempt(view.FileUploadView.as_view()))
你可以详细阅读