【发布时间】:2019-07-26 12:40:34
【问题描述】:
我正在尝试使用 Django rest 框架上的 createAPIView 创建一个注册 api。每次我在 Postman 上发布数据时,它都会返回上述错误,尽管当我在浏览器中运行它时它会得到响应。此外,图像字段导致邮递员的原始数据出现问题。我尝试了很多东西,但似乎没有任何效果。我该怎么办?
序列化器
class UserSerializer(serializers.ModelSerializer):
email = serializers.EmailField(
required=True,
validators=[UniqueValidator(queryset=User.objects.all())]
)
password = serializers.CharField(min_length=8)
class Meta:
model = User
fields = ('id', 'first_name','last_name', 'email', 'username','password')
extra_kwargs = {'user': {'required': False}}
class UserProfileSerializer(serializers.ModelSerializer):
user = UserSerializer()
code = serializers.CharField(read_only=True)
avatar = serializers.FileField(use_url=False)
class Meta:
model = UserProfile
fields = '__all__'
extra_kwargs = {'user': {'required': False}}
def create(self, validated_data):
user_data = validated_data.pop('user',None)
image = validated_data.pop('avatar')
upr=UserProfile.objects.create(user=user_data, image=image**validated_data)
return upr
观看次数
class UserCreate(generics.ListCreateAPIView):
serializer_class = UserProfileSerializer
user_serializer = UserSerializer
queryset = UserProfile.objects.all()
parser_classes = (FormParser,MultiPartParser,FileUploadParser)
def post(self, request):
serializer = UserProfileSerializer(data=request.data)
print(request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
【问题讨论】:
-
不确定这里出了什么问题,但就您的图像问题而言:我认为这与在 Postman 中使用错误的编码类型有关。通过表单上传数据时,需要添加
enctype="multipart/form-data"。 Django 管理表单会为您处理这个问题。 (最好谷歌这个以获得更好的信息)。下次,如果可以避免的话,请不要将两个不同的问题放在一个问题中。也比“它不起作用”或“它很时髦”更清楚。 -
我没有使用 html 表单。我是 REST 的新手。你能告诉我我必须在哪里提到这一点吗?
-
就您的真实问题而言:邮递员和您的浏览器将使用不同的用户会话。您在两个应用程序中都有登录用户吗?另外,你是不是不小心把 GET 参数放在了 body 中,或者 POST 参数放在了 GET 参数区域? (在 Postman 中它们是两种不同的东西)。
-
我认为用户没有在任何地方登录,我正在使用 Post on Postman。
-
在 Postman 中,每个请求选项卡中都有一个“标题”部分,您可以在其中添加自定义编码。在“语法”下碰巧有一个示例:developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type 此外,我没有足够的经验或消息灵通,无法知道您需要或正在做什么。我希望我已经为您提供了一些句柄来帮助您进一步搜索。
标签: django rest api django-rest-framework