理解Restful架構:http://www.ruanyifeng.com/blog/2011/09/restful
RESTful設計指南:http://www.ruanyifeng.com/blog/2014/05/restful_api.html
Django REST framework文檔:http://www.django-rest-framework.org/#installation
Django RESTful 中文翻譯:http://blog.csdn.net/ppppfly/article/category/6170709html
第一步:使用pip安裝:python
pip3 install djangorestframework pip3 install djangorestframework -i http://pipy.douban.com/simple #豆瓣源
第二步:添加rest_framework
到settings中的INSTALLED_APPS
中:django
INSTALLED_APPS = ( ... 'rest_framework', )
若是你須要使用瀏覽器API,須要添加REST framework的登陸註銷模塊,須要將下面的代碼添加到urls.py中:json
urlpatterns = [ ... url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
注意:URL路徑能夠任意編寫,但你必須include 'rest_framework.urls'
,且使用'rest_framework'
這個namespace(命名空間)。若是你的Django是1.9+版本,你也能夠不寫namespace
,REST framework會幫你自動設置。api
讓咱們看一個簡單用例:如何用REST framework 來搭建一個簡單的支持modle的API。瀏覽器
咱們將建立一個讀/寫API,來處理咱們項目中的用戶信息。restful
任何REST framework的全局設置,都存放在一個配置字典(dictionary,有些語言如Java中的map)中,名爲REST_FRAMEWORK
。咱們從如下的操做開始,把下面的內容添加到你的settings.py模塊中:架構
REST_FRAMEWORK = { # 使用Django的標準`django.contrib.auth`權限管理類, # 或者爲還沒有認證的用戶,賦予只讀權限. 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ] }
別忘了,確保你已經將 rest_framework 添加到你的INSTALLED_APPS中。post
如今咱們已作好準備,來建立咱們的API了。這是咱們的項目根下urls.py模塊:ui
from django.conf.urls import url, include from django.contrib.auth.models import User from rest_framework import routers, serializers, viewsets # Serializers定義了API的表現形式. class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ('url', 'username', 'email', 'is_staff') # ViewSets 定義了 視圖(view) 的行爲. class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer # Routers 提供了一種簡單途徑,自動地配置了URL。 router = routers.DefaultRouter() router.register(r'users', UserViewSet) # 使用自動的URL路由,讓咱們的API跑起來。 # 此外,咱們也包括了登入可視化API的URLs。 urlpatterns = [ url(r'^', include(router.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
如今你能夠在瀏覽器的http://127.0.0.1:8000/裏,打開你新建的’users’ API了。使用右上角的登錄控制,能夠對系統用戶進行新增和刪除操做
from django.conf.urls import url, include #從已存在的assets項目中導入數據models模塊 from assets import models from rest_framework import routers,serializers,viewsets #定義一個表現形式 class UserSerializer(serializers.ModelSeriallizer): class Meta: model = models.UserProfile fields = ('username','name','token','email','is_staff') class AssetSerializer(serializers.ModelSerializer): class Meta: model = models.Asset ...
from rest_framework import viewsets from assets import models from assets import rest_searializer class UserViewSet(viewsets.ModelViewSet): queryset = models.UserProfile.objects.all() serializer_class = rest_searializer.UserSerializer class AssetViewSet(viewsets.ModelViewSet): queryset = models.Asset.objects.all() serializer_class = rest_searializer.AssetSerializer
rest_urls.py:
from rest_framework import routers from django.conf.urls import url,include from assets import rest_viewset router = routers.DefaultRouter() router.register(r'users',rest_viewset.UserViewSet) router.register(r'assets',rest_viewset.AssetViewSet) router.register(r'manufactory',rest_viewset.ManufactoryViewSet) router.register(r'business_unit',rest_viewset.BusinessUnitViewSet) urlpatterns = [ url(r'',include(router.urls)), url(r'^api-auth',include('rest_framework.urls',namespace='rest_framework')) ]
settings.py:
REST_FRAMEWORK = { # 使用Django的標準`django.contrib.auth`權限管理類, # 或者爲還沒有認證的用戶,賦予只讀權限. 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ] }
使用API插入數據的例子,views.py中:
def api_test(request): if request.method =="GET": return render(request,"test_post.html") else: data = json.loads(request.POST.get("data")) print("--->",data) rest_obj = rest_searializer.AssetSerializer(data=data,many=True) if rest_obj.is_valid(): rest_obj.save() return render(request,"test_post.html",{"errors":rest_obj.errors,"data":rest_obj.data})
其中many=true
,是將queryset多對多序列化,詳細參數後面會有表述.
function serializer(data, datetime_format='timestamp', output_type='raw', include_attr=None, except_attr=None, foreign=False, many=False)
data(Required|(QuerySet, Page, list, django model object))-待處理數據 datetime_format(Optional|string)-若是包含 datetime 將 datetime 轉換成相應格式.默認爲 "timestamp"(時間戳) output_type(Optional|string)-serialize type. 默認「 raw 」原始數據,即返回 list 或 dict include_attr(Optional|(list, tuple))-只序列化 include_attr 列表裏的字段。默認爲 None exclude_attr(Optional|(list, tuple))-不序列化 except_attr 列表裏的字段。默認爲 None foreign(Optional|bool)-是否序列化 ForeignKeyField 。 include_attr 與 exclude_attr 對 ForeignKeyField 依舊有效。 默認爲 False many(Optional|bool)-是否序列化 ManyToManyField 。 include_attr 與 exclude_attr 對 ManyToManyField 依舊有效 默認爲 False
參考:http://www.django-rest-framework.org/
參考:http://www.cnblogs.com/ccorz/p/Django-zhiRestful-API.html