• 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

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 阮小二买彩票
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    让程序后台隐藏运行
    只要你喜欢,并且可以养家糊口,就是好的
  • 原文地址:https://www.cnblogs.com/shangpolu/p/6883278.html
Copyright © 2020-2023  润新知