具備以下知識:
django
http://www.cnblogs.com/menkeyi/p/5882464.html
http://www.cnblogs.com/menkeyi/p/5882453.html
安裝Django Restframework
官方網站
http://www.django-rest-framework.org/
安裝方法
pip install djangorestframework
pip install markdown # Markdown support for the browsable API.
pip install django-filter # Filtering support
加入app

在最后一行增加以下內容:允許未認證的用戶只讀權限
1 REST_FRAMEWORK = { 2 # Use Django's standard `django.contrib.auth` permissions, 3 # or allow read-only access for unauthenticated users. 4 'DEFAULT_PERMISSION_CLASSES': [ 5 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' 6 ] 7 }

創建用戶測試一下看看返回值和內容有什么變化

按照api規范 http://localhost/api/users/1 這樣就可以查看具體的1(資源)用戶,http://localhost/api/users 查看所有用戶

接下來看看它是如何實現的:
先看url
from django.conf.urls import include, url from django.contrib import admin #導入rest_urls from assets import rest_urls,urls as asset_urls import views #根據url(r'^api/',include(rest_urls)),找到api的url入口文件rest_urls urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^api/',include(rest_urls)), url(r'asset/',include(asset_urls)), url(r'^$',views.index,name="dashboard"), url(r'^login/$',views.acc_login,name='login'), ]
在接着查看rest_urls文件
#_*_coding:utf-8_*_ from django.conf.urls import url, include #導入routers方法 from rest_framework import routers import rest_views as views #這個是rest_framework封裝django 的routers router = routers.DefaultRouter() #注冊一下,然后關聯后面視圖 router.register(r'users', views.UserViewSet) router.register(r'assets', views.AssetViewSet) router.register(r'servers', views.ServerViewSet) # Wire up our API using automatic URL routing. # Additionally, we include login URLs for the browsable API. #注意看這里 :url(r'^', include(router.urls)) #所有以localhost/api 開頭的都去找router.urls # urlpatterns = [ url(r'^', include(router.urls)), url(r'^asset_list/$',views.AssetList ), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
先看一下views.UserViewSet
#_*_coding:utf-8_*_ import myauth from rest_framework import viewsets from serializers import UserSerializer, AssetSerializer,ServerSerializer from rest_framework import status from rest_framework import permissions from rest_framework.decorators import api_view,permission_classes from rest_framework.response import Response import models #這個跟django的類方法可不一樣 以前都是self,現在是一個viewsets.ModelViewSet 類方法 class UserViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ #查詢用戶信息myauth.UserProfile.objects.all().order_by('-date_joined') #queryset,serializer_class 這個變量名是死的不能改 queryset = myauth.UserProfile.objects.all().order_by('-date_joined') #UserSerializer 序列化(表現層,將數據按照一定格式來處理然后返回給前端) serializer_class = UserSerializer
看看UserSerializer是什么東西(這個是自己寫的)
#_*_coding:utf-8_*_ from myauth import UserProfile #導入表結構 import models #導入rest_framework的serializers方法 from rest_framework import serializers #繼承serializers.HyperlinkedModelSerializer超鏈接方法,看頁面都是用鏈接操作的 class UserSerializer(serializers.HyperlinkedModelSerializer): #實際這里也對數據進行了驗證,但這個認證是由UserProfile表結構來完成。api中沒有定義這個驗證 class Meta: #選擇對應的表 model = UserProfile #定義處理UserProfile表中的字段。序列化這些字段。這里只處理UserProfile表的數據,如果傳遞來的是其它表數據那么對不起 這里會報錯 fields = ('url', 'name', 'email','is_admin') class AssetSerializer(serializers.ModelSerializer): class Meta: model = models.Asset #深度查詢等級,資產表是被server表關聯的。當查詢資產表的時候其實也可以直接查詢跟它關聯的表。 #depth就是這個作用,當然最好這里別的太深。默認查詢0層 depth=2 fields = ('name', 'sn','server','networkdevice') class ServerSerializer(serializers.ModelSerializer): class Meta: model = models.Server #fields = ('name', 'sn','server')
所有流程就完畢了 ,總結下流程。

演示下深度查詢的作用:
現在暫時沒有數據這里

增加一些數據,先把depth改成0

增加一些數據,先把depth改成1

