Django開發部落格 RESTful

2021-09-24 22:25:07 字數 4158 閱讀 5806

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...