Django REST Framework 集成系統API

  引言

  基於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

 

  登陸系統

 

 

 詳細功能介紹:

 

 

 刪除和修改的功能:

 

 

 

  自動生成API文檔

  執行依賴安裝

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,不積跬步,無以致千里。

相關文章
相關標籤/搜索