Django RESTful framework 學習記(一)
由於想做一個手機充電樁的專案, 而這個專案涉及資料庫, 微信小程式, 而微信小程式需要後臺給相應的api介面, 無奈的我api不會開發, 再此之前一直學了python, 而且用了django框架寫過網站, 心想api不就是一個連結嗎? 而網站也是一個連結, 只是返回的資料不一樣, 我想api和網站間有聯絡吧, 後來進過百度, 知道了django就有框架專門寫api, 那就是我接下來一段時間要學習的 Django RESTful framework了, 在b站上找了一個老男孩的視訊, 就開始了我的api之旅.
先來介紹一下RESTful規範吧!
一: RESTful規範(建議)
為什麼說建議呢? 是因為如果不用這個規範, 也能開發出滿足業務邏輯的api, 只是這個規範更加規範, 更加方便而已
1.RESTful概述
RESTful是目前最流行的一種網際網路軟體架構。它結構清晰、符合標準、易於理解、擴充套件方便,所以正得到越來越多網站的採用。
REST是Representational State Transfer的縮寫,是Roy Thomas Fielding在他2000年的博士論文中提出的。其提出的設計概念和準則為:
1. 網路上的所有事物都可以抽象為資源
2. 每個資源都應該有唯一的標識(identifier),對資源的操作不會改變標識
3. 所有的操作都是無狀態的
4. 使用標準方法(GET、POST、PUT、PATCH、DELETE)操作資源
2.RESTful規範
2.1 先說說第一點吧, 那就是規範中規定了不同的提交方法分別代表不同的操作資料庫的方法, 我們知道資料庫常見的是增刪改查, 這就對應著資料提交方式: POST, DELETE, PUT, GET方法.
下面來進行舉例說明吧, 我使用的是django2.0 python3.7版本.
先來看看fbv模式下的檢視.至於怎麼建立django工程, 環境搭建我就不說了, 直接看工程下的urls.py
from django.urls import path from django.contrib import admin from django.urls import path, include from django.conf.urls import url from api import views urlpatterns = [ path('admin/', admin.site.urls), path('', include('api.urls')), url(r'^test_FBV/', views.test_FBV), url(r'^test_CBV/', views.test_CBV.as_view()) ]
然後建立一個app 我的app的名字為api, 所以應該在api下的views.py下寫相應的檢視方法, 如下程式碼
from django.shortcuts import render
# Create your views here.
from rest_framework import viewsets
from .models import Student
from .serializers import StudentSerializers
from django.http import HttpResponse
from django.views import View
from django.views.decorators.csrf import csrf_exempt,csrf_protect
# Create your views here.
def test_FBV(request):
if(request.method == 'POST'):
return HttpResponse("增加資料")
if (request.method == 'PUT'):
return HttpResponse("更新資料")
if (request.method == 'GET'):
return HttpResponse("獲得資料")
if (request.method == 'DELETE'):
return HttpResponse("刪除資料")
接下來用RESTClient測試:
和預期想的一樣, 其他的就不做測試了, 以下是基於CBV的程式碼:
from django.shortcuts import render
# Create your views here.
from rest_framework import viewsets
from .models import Student
from .serializers import StudentSerializers
from django.http import HttpResponse
from django.views import View
from django.views.decorators.csrf import csrf_exempt,csrf_protect
# Create your views here.
def test_FBV(request):
if(request.method == 'POST'):
return HttpResponse("增加資料")
if (request.method == 'PUT'):
return HttpResponse("更新資料")
if (request.method == 'GET'):
return HttpResponse("獲得資料")
if (request.method == 'DELETE'):
return HttpResponse("刪除資料")
class test_CBV(View):
# 以get形式訪問會執行get函式,一般情況下獲取資料
def get(self, *args, **kwargs):
return HttpResponse('獲得資料')
# 以post形式訪問的話會執行post函式,一般情況下發送資料
def post(self, *args, **kwargs):
return HttpResponse('增加資料')
def delete(self, *args, **kwargs):
return HttpResponse('刪除資料')
# 以post形式訪問的話會執行post函式,一般情況下發送資料
def put(self, *args, **kwargs):
return HttpResponse('更新資料')
來看看測試的結果:
詳細的規範可以參考這個連結:http://www.runoob.com/w3cnote/restful-architecture.html