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
相關文章
相關標籤/搜索