REST框架混合类:CreateModelMixin()详解
CreateModelMixin是Django REST框架中的混合类,用于在基于类的视图中实现创建模型的功能。它提供了一个create方法,处理HTTP POST请求,并在数据库中创建一个新的模型对象。
下面是CreateModelMixin的详解和使用示例。
详解:
CreateModelMixin是一个通过混合模式来增加创建模型对象功能的类,它提供了一个create方法,该方法在HTTP POST请求时被调用。
在调用create方法时,它会通过序列化器(Serializer)类从请求数据中解析出模型对象的属性,并使用这些属性来在数据库中创建一个新的模型对象。
CreateModelMixin需要与GenericAPIView一起使用,因为它依赖于GenericAPIView中定义的属性和方法。
CreateModelMixin提供了以下功能:
1. 创建模型对象:通过create方法,根据请求数据在数据库中创建一个新的模型对象。
2. 返回创建后的模型对象数据:在创建成功后,将创建后的模型对象数据作为HTTP响应返回。
使用例子:
在一个基于类的视图中,我们可以通过继承CreateModelMixin和GenericAPIView,实现创建模型对象的功能。
首先,创建一个模型类和序列化器类,这里以一个博客文章为例:
# models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
# serializers.py
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__'
接下来,在views.py中定义视图类,并继承CreateModelMixin和GenericAPIView类。并指定模型类和序列化器类。
# views.py
from rest_framework.mixins import CreateModelMixin
from rest_framework.generics import GenericAPIView
from .models import Article
from .serializers import ArticleSerializer
class ArticleCreateView(CreateModelMixin, GenericAPIView):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
在视图类中,我们将CreateModelMixin和GenericAPIView类继承到ArticleCreateView中,并指定查询集和序列化器。然后,在post方法中调用create方法。
最后,配置URL路由,将请求映射到ArticleCreateView视图类。
# urls.py
from django.urls import path
from .views import ArticleCreateView
urlpatterns = [
path('articles/create/', ArticleCreateView.as_view(), name='article_create'),
]
现在,我们可以发送HTTP POST请求到/articles/create/,来创建一篇博客文章。
例如,我们可以使用curl命令来发送一个HTTP POST请求:
$ curl -X POST -H 'Content-Type: application/json' -d '{"title": "My First Article", "content": "This is my first article"}' http://localhost:8000/articles/create/
完成创建后,将返回创建后的模型对象数据作为HTTP响应。
通过使用CreateModelMixin,我们可以方便地在基于类的视图中实现创建模型的功能,并且能够重用这个功能在多个视图中。
