django[九] - django rest framework - 迁
Django rest framework介绍
Django REST framework 是用于构建Web API 的强大而灵活的工具包。
我们可能想使用REST框架的一些原因:
- Web浏览API对于开发人员来说是一个巨大的可用性。
- 认证策略包括OAuth1a和OAuth2的包。
- 支持ORM和非ORM数据源的序列化。
- 如果你不需要更强大的功能,就可以使用常规的基于功能的视图。
- 广泛的文档和良好的社区支持。
- 包括Mozilla、Red Hat、Heroku和Eventbrite在内的国际知名公司使用和信任。
安装
Requirements
REST framework requires the following: Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) Django (1.8, 1.9, 1.10, 1.11)
Installation
django==1.8 djangorestframework==3.2.0 pip install markdown # Markdown support for the browsable API. pip install django-filter # Filtering support
Add 'rest_framework' to your INSTALLED_APPS setting.
INSTALLED_APPS = (
...
'rest_framework',
)
实例
urls.py
# coding:utf-8
from django.conf.urls import patterns, include, url
from japi.views import *
from rest_framework.routers import DefaultRouter
router = DefaultRouter() # 动态路由,不用再写明细的路由了
router.register(r'assets', AssetViewSet,base_name='test_assets') # 把对应的视图对象加到路由里面,视图里面的方法就是可访问的路由名字
urlpatterns = patterns('',
url(r'^', include(router.urls)),
url(r'^test/$', UserView.as_view(), name='test_api_asset_list'),
)
serializers.py
# -*- coding: utf-8 -*-
# @Author: gaotao
# @Date: 2018-05-25 11:13:31
# @Last Modified by: richardzgt
# @Last Modified time: 2018-06-22 16:18:23
# Purpose:
# 三种序列化模式,推荐ModelSerializer,即模型序化
from rest_framework.serializers import Serializer
from rest_framework.serializers import ModelSerializer
from rest_framework.serializers import HyperlinkedModelSerializer
from jasset.models import Asset
class AssetSerializer(ModelSerializer):
class Meta:
model = Asset
fields = [ field.name for field in Asset._meta.fields ] # 全部fields
depth = 5
# depth = 0 或 1, 只显示FK的PK, 如果=2,可以显示FK对象的字段,比如下面的group外键;
# [{"id":1,"username":"Lena",..."group":{"id":1,"title":"A组"}},
# 如果外键嵌套很多,depth深度过深可能会影响性能。。
views.py
# 测试用例
class UserView(APIView):
def get(self, request):
user = User.objects.all()
user_id = request.GET.get("id", '')
user_ids = request.GET.getlist("ids", '')
return json_returner(0,"id:[%s] - ids:%s" % (user_id,user_ids))

浙公网安备 33010602011771号