Restful API官方文档

Posted 总要做些什么

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Restful API官方文档相关的知识,希望对你有一定的参考价值。

理解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/6170709

基于Django的RESTful安装

第一步:使用pip安装:

pip3 install djangorestframework
pip3 install djangorestframework -i http://pipy.douban.com/simple #豆瓣源

第二步:添加rest_framework到settings中的INSTALLED_APPS中:

INSTALLED_APPS = ( ... \'rest_framework\', )

 如果你需要使用浏览器API,需要添加REST framework的登录注销模块,需要将下面的代码添加到urls.py中:

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会帮你自动设置。

例子

让我们看一个简单用例:如何用REST framework 来搭建一个简单的支持modle的API。

我们将创建一个读/写API,来处理我们项目中的用户信息。

任何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中。

现在我们已做好准备,来创建我们的API了。这是我们的项目根下urls.py模块:

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多对多序列化,详细参数后面会有表述.

dss.Serializer 提供序列器

function serializer(data, datetime_format=\'timestamp\', output_type=\'raw\', include_attr=None, except_attr=None, foreign=False, many=False)

Parameters:

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

以上是关于Restful API官方文档的主要内容,如果未能解决你的问题,请参考以下文章

Swagger简介,轻松构造restful api的文档

通过beego快速创建一个Restful风格API项目及API文档自动化(转)

kylin 使用RESTful API 请求

Yii2 使用 RESTful 写API接口 实例

Spring集成Swagger2,提供RestFul API

Spring集成Swagger2,提供RestFul API