首页 > 解决方案 > 在 django rest 框架中发出发布请求时出现错误 415 不支持的媒体类型

问题描述

嘿,我正在使用 django rest 框架来注册用户。我正在使用具有内置 User 类的所有方法的自定义用户模型。我刚刚在 CharType 模型中添加了一个电话号码字段。现在,在设置完所有内容后,如果我尝试通过注册来填充数据库,它会给我 415 媒体类型不受支持的错误。

模型.py

from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.

class CustomUser(AbstractUser):
    phone_number = models.CharField(max_length=20, default=False, unique=True)

视图.py

from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth import get_user_model
from .serializers import UserSerializer

# Create your views here.

class SignUp(APIView):
    model = get_user_model()
    def post(self, request):
        serializer = UserSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data)

我希望可以选择填写电子邮件字段。

序列化程序.py

from rest_framework import serializers
from django.contrib.auth import get_user_model
from rest_framework.validators import UniqueValidator

UserModel = get_user_model()

class UserSerializer(serializers.ModelSerializer):
    phone_number = serializers.CharField(
                required=True,
                validators=[UniqueValidator(queryset=UserModel.objects.all(), message=("Phone Number already exists"))]
            )
    email = serializers.CharField(source='email', allow_blank=True)
    class Meta:
        model = UserModel
        fields = ['username', 'phone_number', 'email', 'password', 'first_name', 'last_name']
        extra_kwargs = {
            'first_name': {'required': True},
            'last_name': {'required': True}
        }
    
    password = serializers.CharField(write_only=True, required=True)

    def create(self, validated_data):
            user = UserModel.objects.create(
                username=validated_data['username'],
                email=validated_data['email'],
                phone_number = validated_data['phone_number'],
                first_name = validated_data['first_name'],
                last_name = validated_data['last_name']
            )            
            user.set_password(validated_data['password'])
            user.save()
            return user

网址.py

from django.urls import path
from .import views
urlpatterns = [
    path('sign-up', views.SignUp.as_view(), name='sign-up'),
]

标签: django-modelsdjango-rest-framework

解决方案


推荐阅读