- 自動生成符合 RESTful 規範的 API
- 支持 OPTION、HEAD、POST、GET、PATCH、PUT、DELETE
- 根據
Content-Type
來動態的返回數據類型(如 text、json)
- 生成 browserable 的交互頁面(自動爲 API 生成很是友好的瀏覽器頁面)
- 很是細粒度的權限管理(能夠細粒度到 field 級別)
示意圖javascript
安裝
$ pip install djangorestframework $ pip install markdown
概述
Django Rest framework 的流程大概是這樣的html
- 創建 Models
- 依靠 Serialiers 將數據庫取出的數據 Parse 爲 API 的數據(可用於返回給客戶端,也可用於瀏覽器顯示)
- ViewSet 是一個 views 的集合,根據客戶端的請求(GET、POST等),返回 Serialiers 處理的數據
- 權限 Premissions 也在這一步作處理
- ViewSet 可在 Routers 進行註冊,註冊後會顯示在 Api Root 頁上
- 在 urls 裏註冊 ViewSet 生成的 view,指定監聽的 url
但願全面細緻瞭解的人請移步去看官方文檔,我這裏就不一步步的細說了,而是分塊來進行介紹java
準備工做 & Models
讓咱們來寫個小項目練練手node
- 先用
manage.py startproject rest
來生成一個項目 - 再用
manage.py createsuperuser
建立用戶(後面權限管理會用到) - 初始化數據庫
manage.py migrate
而後固然是編寫 models,爲了展現 rest_framework 的強大之處,我給 models 定義了一個自定義的 fieldpython
# myproject/myapp/models.py #! /usr/bin/env python # -*- coding: utf-8 from __future__ import unicode_literals, absolute_import import cPickle as pickle from django.db import models from django.contrib.auth.models import User class SerializedField(models.TextField): """序列化域 用 pickle 來實現存儲 Python 對象 """ __metaclass__ = models.SubfieldBase # 必須指定該 metaclass 才能使用 to_python def validate(self, val): raise isinstance(val, basestring) def to_python(self, val): """從數據庫中取出字符串,解析爲 python 對象""" if val and isinstance(val, unicode): return pickle.loads(val.encode('utf-8')) return val def get_prep_value(self, val): """將 python object 存入數據庫""" return pickle.dumps(val) class MyModel(models.Model): created_at = models.DateTimeField(auto_now_add=True) # 注意這裏創建了一個外鍵 owner = models.ForeignKey(User, related_name='mymodels') field = models.CharField(max_length=100) options = SerializedField(max_length=1000, default