Django基於REST framework實現API
阿新 • • 發佈:2019-02-17
types def for csharp request ati 再次 ali ews
一、基於RESTframework實現API
1、環境準備
安裝restframework,註冊app
pip install djangorestframework
INSTALLED_APPS = [ ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘app01.apps.App01Config‘, ‘rest_framework‘, ]
2、url
urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^publish/‘, views.PublishView.as_view()), ]
3、models
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models # Create your models here. from django.db import models # Create your models here. class Book(models.Model): title=models.CharField(max_length=32) price=models.IntegerField() pub_date=models.DateField() publish=models.ForeignKey("Publish") authors=models.ManyToManyField("Author") def __str__(self): return self.title class Publish(models.Model): name=models.CharField(max_length=32) email=models.EmailField() def __str__(self): return self.name class Author(models.Model): name=models.CharField(max_length=32) age=models.IntegerField() def __str__(self): return self.name
4、views
基於CBV方式
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render,HttpResponse # Create your views here. from .models import Publish from rest_framework.views import APIView class PublishView(APIView): def get(self,request): #序列化方式4rest_framework from rest_framework.response import Response publish_list = Publish.objects.all() ps = PublishSerializers(publish_list, many=True) return Response(ps.data) def post(self,request): return HttpResponse(‘POST‘)
5、測試
二、序列化
API返回結果的形式,json是非常流行的。但是我們在序列化結果時,有多種方式,每種方式實現的方式不同。
1、原生json方式
import json publish_list = list(Publish.objects.all().values()) return HttpResponse(json.dumps(publish_list))
使用json方式對結果進行強轉,先把結果強轉成列表的方式,然後通過json的dumps方式對結果進行格式化。
註意:
這種方式實現最簡單,也可以自定制需要返回的字段。
2、model_to_dict方法
#序列化方式2 # from django.forms.models import model_to_dict # publish_list = Publish.objects.all() # data = [] # for obj in publish_list: # data.append(model_to_dict(obj)) # return HttpResponse(data)
通過models自帶的model_to_dict方法直接把obj對象轉換成字典的形式,然後返回。缺點:需要把每個對象再次進行處理。
3、django自帶的serializers方法
#序列化方式3 # from django.core import serializers # publish_list = Publish.objects.all() # data = serializers.serialize("json", publish_list) # return HttpResponse(data)
4、rest-framework自帶serializers方法
from rest_framework import serializers class PublishSerializers(serializers.Serializer): name=serializers.CharField(max_length=32) email=serializers.CharField() from rest_framework.views import APIView
視圖函數繼承APIView方法
#序列化方式4rest_framework from rest_framework.response import Response publish_list = Publish.objects.all() ps = PublishSerializers(publish_list, many=True) return Response(ps.data)
Django基於REST framework實現API