har*_*per 9 python django django-views django-rest-framework
根据 DRF 文档,使用 GenericAPIView 时应设置 serializer_class 属性。但是为什么 serializer_class 属性甚至可以与 APIView 一起使用?这是我的 API 代码:
class UserView(APIView):
serializer_class = SignupSerializer
@transaction.atomic
def post(self, request):
email = get_data_param(request, 'email', None)
password = get_data_param(request, 'password', None)
params = request.POST.copy()
params["username"] = email
serializer = UserSerializer(data=params)
if serializer.is_valid(raise_exception=True):
user = serializer.save()
user.set_password(password)
user.save()
params["user"] = user.id
serializer = CustomProfileSerializer(data=params)
if serializer.is_valid(raise_exception=True):
profile = serializer.save()
return Response(response_json(True, profile.to_dict(), None))
class SignupSerializer(serializers.Serializer):
email = serializers.EmailField(max_length=100)
password = serializers.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中浏览此 API 时,它确实将电子邮件和密码字段显示为输入,但如果我不设置此 serializer_class 属性,则不会显示任何输入字段。理想情况下,此 serializer_class 属性不应与 APIView 一起使用。我已经搜索了很多,但没有与此相关的可用内容。
任何人都可以解释这种行为吗?谢谢。
小智 3
我想这可以帮助你。
创建serializer.py并写入:
from rest_framework import serializers
from .models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('email', 'password')
Run Code Online (Sandbox Code Playgroud)
和views.py:
from rest_framework.response import Response
from rest_framework.views import APIView
from .serializers import UserSerializer
from .models import User
class AddUserAPIView(APIView):
def post(self, request):
user_serializer = UserSerializer(data=request.data)
if user_serializer.is_valid():
user = user_serializer.save()
user.set_password(user_serializer.data["password"])
return Response({'message': 'user added successfully!'})
return Response({'message': user_serializer.errors})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4738 次 |
| 最近记录: |