zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    我这些年的项目管理心得...
    14条建议,使你的IT职业生涯更上一层楼
    手机通过WIFI连上ZXV10 H618B路由器但不能上网问题的解决
    优秀中层必备的十大能力
    IMX51启动模式
    VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题
    VS2005工程增加SDK
    VS2005下开发PPC2003和WM50编译器一些设置
    CTO俱乐部下午茶:技术团队管理中的那些事儿
    Android通过JNI调用驱动程序(完全解析实例)
  • 原文地址:https://www.cnblogs.com/duanlinxiao/p/9881939.html
Copyright © 2011-2022 走看看