相关疑难解决方法(0)

REST中的PUT与POST

根据HTTP/1.1规范:

POST方法用来请求原始服务器接受被附在请求由标识的资源的新下属实体Request-URIRequest-Line

换句话说,POST用于创建.

PUT方法请求将所包含的实体存储在提供的实体下Request-URI.如果Request-URI引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本.如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.

也就是说,PUT用于创建或更新.

那么,应该使用哪一个来创建资源?或者需要支持两者?

rest post http put

5227
推荐指数
34
解决办法
227万
查看次数

如何在 django API 中一次更新多个记录(批量更新)

我需要在一个请求categories中多次更新Article

ArticleViewSet我有:

def get_serializer_class(self):
    if self.action in ['partial_update', 'update']:
        return ArticlePostSerializer
    return ArticleSerializer
Run Code Online (Sandbox Code Playgroud)

所以ArticlePostSerializer需要改变。

这是我的序列化程序代码:

class ArticleShortCategorySerializer(serializers.ModelSerializer):

    class Meta:
        model = Category
        fields = 'id', 'name'


class ArticleSerializer(serializers.ModelSerializer):
    categories = serializers.SerializerMethodField()

    def get_categories(self, obj):
        return ArticleShortCategorySerializer(obj.categories, many=True).data

    class Meta:
        model = Article
        read_only_fields = 'id'
        fields = ('categories', 'text') + read_only_fields


class ArticlePostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Article
        fields = 'id', 'categories', 'text'
Run Code Online (Sandbox Code Playgroud)

我尝试添加:

class ArticlePostListSerializer(serializers.ListSerializer):
Run Code Online (Sandbox Code Playgroud)

class Meta:
    list_serializer_class = ArticlePostListSerializer …
Run Code Online (Sandbox Code Playgroud)

python django django-serializer

6
推荐指数
1
解决办法
6619
查看次数

如果 Django Rest Framework 中的“电子邮件已经存在”,则更新

我在 Django 应用程序中有一个 Candidates 对象模型,我从前端的表单中获得。

如果此候选人使用同一电子邮件再次发送个人数据,DRF 响应{"email":["使用该电子邮件的用户已经存在。"]}并且不保存表单。

这个想法是,如果这个候选人再次发送带有个人电子邮件的表格并且我已经将它保存在我的数据库中,我将更新这个候选人的个人数据。

我试过:

我的看法:

@csrf_exempt
@api_view(['GET', 'POST','PATCH'])
def CandidatesCreate(request, *args, **kwargs):
parser_classes = (FileUploadParser,)

if request.method == 'PATCH' or request.method == 'POST':

    serializer = CandidatesSerializer(data=request.data)
    if serializer.is_valid():
        instance, created = serializer.get_or_create()
        if not created:
            serializer.update(instance, serializer.validated_data)
        return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)

我的序列化器

class CandidatesSerializer(serializers.ModelSerializer):

cv = serializers.FileField(required=False,max_length=None, use_url=True)

class Meta:
    model = Candidates
    fields = (
        'pk', 
        'user',
        'name', 
        'email', 
        'whatever',
        'whatever'
        )
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用。老实说,我不确定 get_or_create() 是否折旧。我没有找到有关它的真实信息。

django serialization django-rest-framework

2
推荐指数
2
解决办法
3087
查看次数