zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    PVE6.3去订阅
    帝国CMS灵动标签当天更新的日期显示红色其他颜色变成灰色
    灵动标签实现循环子栏目数据——实现 循环子栏目数据标签 (listsonclass)的效果
    帝国cms灵动标签实现循环子栏目数据
    帝国cms常用灵动标签
    51nod1847 奇怪的数学题
    CTS2019 氪金手游
    CTS2019 重复
    UR #5 怎样跑得更快
    AGC034 F
  • 原文地址:https://www.cnblogs.com/shangpolu/p/6883278.html
Copyright © 2011-2022 走看看