我正在为招聘任务而苦苦挣扎,我在Django还是个新手,而且我以前还没有使用过REST框架. 我试图建立一个视图,用户可以上传图片,并设置多长时间的链接应该是有效的(在范围3,000-30000,验证工程).此功能通过安装收到文件链接的postman 工作,我有以下错误:
return renderer.render(serializer.data, None, {'style': style})
AttributeError: 'str' object has no attribute 'data'
当我try 使用网站上传文件时,序列化程序没有通过验证.
我在html文件中使用Render_Form,QueryDict中的结果与postman 中的结果不同,所以我想这就是问题所在,但我不知道如何解决它: 使用网站:
'image_url': ['airplane.jpg'],
使用postman :
'image_url': [<InMemoryUploadedFile: airplane.jpg (image/jpeg)>]
Models.py:
import datetime
from django.db import models
from django.contrib.auth.models import User
from images.validators import expiring_in_validator
def upload_to(instance, filename):
unique_identify = str(int(datetime.datetime.now().timestamp()))
return f"media/{filename}-{unique_identify}"
# Create your models here.
class Image(models.Model):
uploaded_by = models.ForeignKey(User, on_delete=models.CASCADE)
image_url = models.ImageField(upload_to=upload_to)
expiring_within = models.IntegerField(validators=[expiring_in_validator])
Serializers.py:
from rest_framework import serializers
from images.models import Image
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Image
fields = ['image_url', 'expiring_within']
Views.py:
from django.shortcuts import render
from django.views import View
from rest_framework import status
from rest_framework.parsers import FormParser, MultiPartParser
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.renderers import TemplateHTMLRenderer
from images.serializers import PostSerializer
# Create your views here.
class AddImage(APIView):
renderer_classes = [TemplateHTMLRenderer]
# permission_classes = [IsAuthenticated]
template_name = "add_image.html"
parser_classes = [MultiPartParser, FormParser]
def get(self, request):
serializer = PostSerializer()
return Response({"serializer": serializer})
def post(self, request):
serializer = PostSerializer(data=request.data)
if serializer.is_valid():
serializer.save(uploaded_by=self.request.user)
return Response(serializer.data, status=status.HTTP_200_OK)
Html:
<form method="post">
{% csrf_token %}
{% render_form serializer %}
<input type="submit" value="Wyślij">
</form>