Django Restframework 實踐(一)


具備以下知識:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM