1.介紹:
restful api是指符合rest風格的web介面
具體來說就是將所有被請求的實體當作資源,通過http自帶的方法(get, head, post, put, delete)來進行對應的增刪改查等操作。比如:
獲取使用者列表:get /user/
獲取id為1的使用者資源:get /user/1/
建立乙個使用者:post /user/ 再加上body中傳輸的資料
更新id為1的使用者資訊:put /user/1/ 再加上body中的資料
delete用來刪除,用法同put
2.資料格式
關於傳輸資料的格式,在django-rest-framework中預設接受的資料格式是json,也可以通過http請求中headers中的content-type來設定格式,django-rest-framework會據此進行對應的解析
3.使用場景
在開發一套web系統之後,可能需要再提供一套介面給h5端或客戶端使用,也可能是第三方系統使用,在已開發好的系統上開發restful介面是一件十分容易的事,但需要權衡業務對效能的要求
4.使用
django-rest-framework的實現類似於django中的view+form,其中serializer跟form的用法很像
1.安裝
pip install djangorestframework==
3.8.2
pip install coreapi==
2.3.3
# 提供介面文件庫
from rest_framework import serializers
from
.models import post
# 序列化資料,用法類似form
class
postserializer
(serializers.modelserializer)
:class
meta
: model = post
fields =
['title'
,'category'
,'desc'
,'content_html'
,'created_time'
]
from rest_framework import generics
from rest_framework.decorators import api_view
from rest_framework.response import response
from
.models import post
from
.serializers import postserializer
# 將乙個view轉化為api view的裝飾器,提供可選引數來限制請求型別
# api_view(['get', 'post'])
@api_view(
)def
post_list
(request)
: posts = post.objects.
filter
(status=post.status_normal)
post_serializers = postserializer(posts, many=
true
)return response(post_serializers.data)
# 類似view層中的listview,只需指定queryset和用來序列化的類即可實現資料列表頁
# listcreateapiview可以接受post請求,另外還有乙個listapiview僅支援get請求
class
postlist
(generics.listcreateapiview)
: queryset = post.objects.
filter
(status=post.status_normal)
serializer_class = postserializer
4.配置 urls.py :配置restful介面和介面文件
from blog.apis import post_list, postlist
urlpatterns =
[# ......
url(r'^api/post/'
, post_list, name=
'post-list'),
# url(r'^api/post/', postlist.as_view(), name='post-list'),
]
此時已配置好列表頁的restful介面,可通過位址訪問:
django-rest-framework會通過訪問型別(content-type)來渲染對應型別的結果,如果不加format=json,用瀏覽器訪問時會預設渲染為頁面
5.配置通用介面
以上的介面僅能實現列表頁,為針對每個資源的crud操作,django-rest-framework封裝了乙個更上層的抽象類viewset,可在乙個類中實現所有的操作
1.修改 apis.py
from rest_framework import viewsets
from rest_framework.permissions import isadminuser
from
.models import post
from
.serializers import postserializer
# 如果是唯讀介面,可以繼承自 viewsets.readonlymodelviewset
class
postviewset
(viewsets.modelviewset)
: serializer_class = postserializer
queryset = post.objects.
filter
(status=post.status_normal)
# 如果有寫入的需求,那寫入端應當要取得 csrf_token
# permission_classes = [isadminuser] # 寫入時的許可權校驗
2.配置 urls.py
django-rest-framework提供router元件來生成一整套的介面
from rest_framework.routers import defaultrouter
from blog.apis import postviewset
from rest_framework.documentation import include_docs_urls
router = defaultrouter(
)router.register(r'post'
, postviewset, base_name=
'api-post'
)urlpatterns =
[# 此url將提供多個介面,如: 列表頁:/api/post/ 詳情頁:/api/post//
url(r'^api/'
, include(router.urls,))
,# api文件介面
url(r'^api/docs/'
, include_docs_urls(title=
'blogidea apis'))
,
reverse(『api:post-list』)和reverse(『api:post-detail』,args=[1])可以反向解析出列表頁和詳情頁
在postviewset的某個方法中,可以通過self.reverse_action(『list』)獲得列表頁位址,self.reverse_action(『detail』, args=來獲得詳情頁介面位址
3.介面文件
文件配置依賴包:pip install coreapi==2.3.3
通過/api/docs/開啟即可檢視,可以在postviewset中書寫文件說明,這個也會顯示在介面文件中
django 開發部落格2
在models.py裡建乙個文章表,新增 如下圖 使用imagefield需要安裝pillow,pip install pillow就可以了,處理要安裝pillow,django模型中的imagefield和filefield的upload to選項是必填項,所有要存放到指定的路徑下,同時還要配置m...
Django1 7開發部落格
基於最新的django1.7寫的,通俗易懂,非常適合新手入門。感謝博主!參考教程 教程目錄 使用django1.7開發部落格 1 入門篇 使用django1.7開發部落格 2 模型 使用django1.7開發部落格 3 部署 使用django1.7開發部落格 4 三部曲 使用django1.7開發部...
Django專案之 簡單部落格開發
部落格組成 型別備註 文字標題 文字型別 文章摘要 文字型別 文章內容 文字型別 唯一id標記 數值型別 自增 主鍵 發布日期 日期型別 1.定義字段 編寫應用blog中的model.pyfrom django.db import models create your models here.cla...