基於Django REST Framework教程(一分鐘入門)文章後,繼續講一下如何集成開發系統的API。以前在文章中講過web接口開發,那種手寫代碼顯然又慢又不整潔,利用rest framework工具能夠快速造成API。html
打開cmd,輸入python
tree django_restAPI /F
以前開發web接口雖然沒講建立模型,可是實際上已經存在模型,由於開發系統時就已經將數據模型建立了,如:Event和Guest。mysql
這裏的話,咱們是另外開設一個項目,因此依然也要建立,如圖:web
from django.db import models # Create your models here. # 發佈會 class Event(models.Model): name = models.CharField(max_length=100) limit = models.IntegerField() status = models.BooleanField() address = models.CharField(max_length=200) start_time = models.DateTimeField('events time') create_time = models.DateTimeField(auto_now=True) def __str__(self): return self.name # 嘉賓 class Guest(models.Model): event = models.ForeignKey('Event',on_delete=models.CASCADE) realname = models.CharField(max_length=64) phone = models.CharField(max_length=16) email = models.EmailField() sign = models.BooleanField() create_time = models.DateTimeField(auto_now=True,db_column='create_time') class Meta: unique_together = ('phone','event') def __str__(self): return self.realname
模型Event和Guest就是對應數據庫中表及所設計的字段。sql
有了數據,固然就是數據以什麼形式展現出來,DRF ( Django RestFramework ) Serializer的序列化方式能夠類比Django的ModelForm組件的使用數據庫
# 定義好了 Models,咱們能夠開始寫 Serializers,這個至關於 Django 的 Form from rest_framework import serializers from api.models import Event,Guest # 定義API表現形式,序列化或反序列化模型 class EventSerializer(serializers.ModelSerializer): class Meta: model = Event # 定義關聯的 Model fields = ('url','name','address','start_time','limit','status') # 指定返回的 fields class GuestSerializer(serializers.ModelSerializer): class Meta: model = Guest # 定義關聯的 Model fields = ('url','realname','phone','email','sign','event') # 指定返回的 fields # 以上就是定義一個Serializer最簡單的代碼,model指定對應的模型實體,fields指定要序列化的數據域(可理解爲數據庫表的某一列)
肯定了數據展示形式,那麼就是視圖集:ViewSets。在Django中使用基於類的視圖(ClassView),類中所定義的方法名稱與Http的請求方法相對應,才能基於路由將請求分發(dispatch)到ClassView中的方法進行處理,而Django REST framework中能夠突破這一點,經過ViewSets能夠實現自定義路由。django
簡單點說,DRF的Viewsets就容許你將一批功能相似或者有流程的接口寫在一個類裏面。後端
from django.shortcuts import render # Create your views here. from rest_framework import viewsets from api.serializers import,EventSerializer,GuestSerializer from api.models import Event,Guest class EventViewSet(viewsets.ModelViewSet): queryset = Event.objects.all() # 指定結果集 serializer_class = EventSerializer # 指定序列化的類 class GuestViewSet(viewsets.ModelViewSet): queryset = Guest.objects.all() print(queryset,111) serializer_class = GuestSerializer print(serializer_class,222)
上面已經說過ViewSet類能夠實現自定義註冊路由,並經過Router
類自動處理鏈接視圖和URL的資源。api
from django.conf.urls import url, include from rest_framework import routers from api import views router = routers.DefaultRouter() # 定義路由地址 router.register(r'users', views.UserViewSet) # 註冊新的路由地址 router.register(r'groups', views.GroupViewSet) # 註冊新的路由地址 router.register(r'events', views.EventViewSet) # 註冊新的路由地址 router.register(r'guests', views.GuestViewSet) # 註冊新的路由地址 from rest_framework.documentation import include_docs_urls API_TITLE = 'XX系統API文檔' API_DESCRIPTION = '關鍵業務接口文檔' # 使用自動URL路由鏈接咱們的API。 # 另外,咱們還包括支持瀏覽器瀏覽API的登陸URL。 urlpatterns = [ url(r'^', include(router.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), path('admin/', admin.site.urls), ]
我這裏就沒使用mysql數據庫了,固然你可使用,執行命令:瀏覽器
python manage.py makemigrations python manage.py migrate
詳細功能介紹:
刪除和修改的功能:
執行依賴安裝
pip install coreapi pygments markdown
安裝上面依賴包後,只要修改urls.py文件便可:
from rest_framework.documentation import include_docs_urls API_TITLE = 'XX系統API文檔' API_DESCRIPTION = '關鍵業務接口文檔' # 使用自動URL路由鏈接咱們的API。 # 另外,咱們還包括支持瀏覽器瀏覽API的登陸URL。 urlpatterns = [ url(r'^', include(router.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), path('admin/', admin.site.urls), path(r'docs/', include_docs_urls(title=API_TITLE, description=API_DESCRIPTION, authentication_classes=[], permission_classes=[])), url(r'^test1/$', views.test1), ]
其中authentication_classess是認證,permission_classes 是權限。這裏就先不講這兩個東西了。
配置好後直接重啓程序,瀏覽器輸入:http://127.0.0.1:1334/docs/
測試一下:
以上就是接口新增,修改,刪除和查詢的操做,下面補充一點知識:
1.關於先後端分離,能夠參考我csdn的文章:https://blog.csdn.net/liudinglong1989/article/details/104321325
2.REST(Representational State Transfer):表現層狀態轉移,一種軟件架構風格,不是標準。既然不是標準,我能夠遵照,也能夠不遵照!!
3.什麼是RESTful? RESTful是一種開發理念,基於REST構建的API就是Restful風格,稱之爲RESTful框架。
4.表示API的具體網址,每一個網站表明一種資源
資源做爲網站,不能有動詞,並且所用的名詞每每與數據庫的表名對應
API中的名詞應該使用複數,不管子資源或者全部資源
動詞:
GET(SELECT):從服務器取出資源(一項或多項)。
POST(CREATE):在服務器新建一個資源。
PUT(UPDATE):在服務器更新資源(客戶端提供改變後的完整資源)。
DELETE(DELETE):從服務器刪除資源。
以上就是集成系統API的案例,這些遠遠還不夠,但帶你入門是綽綽有餘了,若是深刻學習,能夠研究官網文檔。
若是對python測試開發相關技術感興趣的夥伴,歡迎加入測試開發學習交流QQ羣:696400122,不積跬步,無以致千里。