Невозможно получить данные изображения в API вместе с json данными для регистрации - PullRequest
1 голос
/ 16 февраля 2020

Я хочу создать 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']

это путь / URL : -

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)

Я получаю сообщение об ошибке: -

path ('register', views.FileUploadView.as_view (), name = 'Register'), AttributeError: у объекта 'function' нет атрибута 'as_view'

1 Ответ

0 голосов
/ 16 февраля 2020

Вы декорируете класс как функцию, поэтому ваш код ломается.

Чтобы использовать декоратор для класса, вы можете использовать любой из двух подходов:

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()))

Подробно вы можете прочитать здесь .

...