python Django rest-framework 序列化步骤

django-rest-framework,是一套基于Django 的 REST 框架,是一个强大灵活的构建 Web API 的工具包。本文介绍一下 django-rest-framework 的简单使用。示例代码地址:https://github.com/jhhnjhhn/drf-test
环境
Python (3.6.2)
Django (1.11.5)
djangorestframework (3.6.4)
使用
1、创建项目
mkdir drf-test

cd drf-test

django-admin.py startproject drfTest

cd drfTest/

python manage.py startapp api
2、修改配置文件
编辑 drtTest/setting.py 文件,在 INSTALLED_APPS 添加新应用。
INSTALLED_APPS = (
    ...
    'rest_framework',
    'api.apps.ApiConfig',
)
3、创建模型和数据库
打开 drtTest/models.py 文件,创建一个简单 Product 模型,字段包括 created、name、describe、price、isDelete。
class Product(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    name = models.CharField(max_length=100, default='')
    describe = models.CharField(max_length=500, default='')
    price = models.FloatField()
    isDelete = models.BooleanField(default=False)

    class Meta:
        ordering = ('created',)
模型迁移,并同步数据库。
python manage.py makemigrations api
python manage.py migrate
4、创建序列化器
序列化器可以把模型转换成需要返回的 json、xml 类型数据。在 api 文件下创建 serializers.py 文件。
from rest_framework import serializers
from snippets.models import Product

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ('id', 'created', 'name', 'describe', 'price', 'isDelete')
5、url配置
创建 api/urls.py 文件,用 Router 自动处理 url 和 view 的连接。
from django.conf.urls import url, include
from api import views

# api url 配置
urlpatterns = [

]
在 drtTest/urls.py 中链接 api 应用程序的 url。
from django.conf.urls import url, include
from api import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('api.urls')),
]
6、编写视图
编写视图有很多种方式,下面使用比较简单的两种:
1.使用 APIView
from rest_framework.views import APIView
from django.http import JsonResponse

# Create your views here.
class GetMessageView(APIView):
    # get 请求
    def get(self, request):
        # 获取参数数据
        get = request.GET
        # 获取参数 a
        a = get.get('a')
        print(a)
        # 返回信息
        d = {
            'status': 1,
            'message': 'success',
            }
        return JsonResponse(d)
api/urls.py 中配置 url
urlpatterns = [
      url(r'^test/$', views.GetMessageView.as_view()),
]
终端输入命令,开启服务。
python manage.py runserver
打开浏览器访问 http://127.0.0.1:8000/test/?a=100 接口返回
{"status": 1, "message": "success"}
终端输出
100
[15/Sep/2017 02:39:55] "GET /test/?a=100 HTTP/1.1" 200 35
2.使用 viewsets
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.decorators import detail_route, list_route
from api.serializers import ProductSerializer
from api.models import Product

class ProductViewSet(viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

    @detail_route()
    def changeName(self, request, *args, **kwargs):
        get = request.GET
        product = self.get_object()
        product.name = get.get('newName')
        product.save()

        return Response(product.name)

    @list_route()
    def filterProducts(self, request):
        products = Product.objects.filter(id__in=range(3))
        serializer = ProductSerializer(products, many=True)

        return Response(serializer.data)
api/urls.py 配置 url,使用 Router 自动处理 url 和 view 的连接。
from rest_framework.routers import DefaultRouter
from api.views import ProductViewSet

router = DefaultRouter()
router.register(r'product', views.ProductViewSet)

# api url 配置
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^test/$', views.GetMessageView.as_view()),
]
终端输入命令,开启服务。
python manage.py runserver
原文地址:https://www.cnblogs.com/duanlinxiao/p/9881939.html