zoukankan      html  css  js  c++  java
  • django rest framework

    REST是Representational State Transfer的简称  大致意思是  表现状态转移 ,个人理解为 数据展示格式 转换

    rest api在web开发中的前后端分离开发比较受欢迎,例移动端 或桌面浏览器。也就是说这个url 不依赖于设备 也不依赖于软件环境,只要可以联网即可。这样REST服务可以解决各种各样的数据质量问题,因为rest服务复用性高,可提供给大量不同的应用。

    rest风格的api是面向数据资源的。 这些数据资源都可以通过url来获取。可以充分利用HTTP/HTTPS协议的特点,比如HTTP方法,header信息,HATEOAS直接面向资源进行操作。

    rest api 规范 :
    1.在url上要表明这是一个api. 例 https://api.example.com , https://example.org/api/ 

    2.路径:使用名词表示(可复数)  例 https://api.example.com/v1/zoos  , https://apid.example.com/v1/animals 

    3.请求方式: GET:获取数据  POST:写入数据  PUT:覆盖原数据  PATCH:部分修改数据  DELETE:删除数据 

    4.返回结果中应包含状态码,来表明请求状态

    5.url与数据对应规范: GET/collection :返回资源对象列表 ,GET/collection/resource:返回单个资源对象 ,POST/collection :返回新建的资源对象

    PUT/collection/resource :返回完整的资源对象 , PATCH/collection/resource:返回完整的资源对象 ,DELETE/collection/resource:返回一个空文档

    Django 如下方式来实现自动实现queryset数据的序列化。

    1 手动将django的orm查询出的对象转换成json

    urls.py 
    from coffeehouse.index's import views as stores_views
    urlpatterns = [
    url(r'^rest/$',stores_views.rest_store,name="rest_index"),
    ]

    views.py

    from django.http import HttpResponse

    from indexs.models import CollectSite

    import json

    def rest_store(request):

      all_site=CollectSite.objects.all()
      all_site=[{"id":Site.id,"url":Site.siteurl,"name":Site.name,"comment":Site.comment,"class":Site.siteclass} for Site in all_site]
      return HttpResponse({'all_site':json.dumps(all_site)},content_type='application/json')

    HttpResponse()设置了content_type,也就是在HTTP响应头中设置了Content-Type ,告诉请求方,返回的数据类型是JSON。避免了用户猜测如何使用一个rest服务提供的回复。另一个Content-Type的值application.xml 表示rest服务的返回数据格式是XML。不提供content_type则统一认为是JSON格式

    2 使用django.core的serializers 

    urls.py

    urlpatterns = [
    url(r'^rest/$',stores_views.rest_store,name="rest_index"),
    url(r'^(?P<store_id>d+)/rest/$',stores_views.rest_store,name="rest_detail"),#捕获url中内容以命名参数形式传给views的函数,同一个view函数用于两个url
    ]

    views.py

    from django.core import serializers

    def rest_store(request,store_id=None):
      store_list=Item.objects.all()
      if store_id :
        store_list=store_list.filter(id=store_id) #这个filter()是对已查取的结果进行筛选

      if 'type' in request.GET and request.GET['type']=='xml':
        #serialize()可以按第一个参数的格式(‘xml’或‘json’)将第二个参数序列化成相应格式
        serialized_stores=serializers.serialize('xml',store_list)
        return HttpResponse(serialized_stores,content_type='application/xml')
      else:
        serialized_stores=serializers.serialize('json',store_list)
        return HttpResponse(serialized_stores,content_type='application/json')

    如果提供的数据格式不符合HttpResponse的第二个参数,默认转化为json格式

    3. 对查询的对象做更复杂的操作,功能更丰富,友好的rest api可使用django rest framework 

    密集的rest api 认证机制,提供更稳定,持久的序列化功能,处理python中不可序列化对象的序列化问题

    Django Tastypie Framework是django的第二大受欢迎的rest 框架。 

    安装

    django rest framework作为python的标准包,可以通过pip install djangorestframework

    启用

    在django创建的项目中的settings.py的INSTALLED_APPS中加上'rest_framework'

    serializers 和views

    核心模块serializers用于定义数据的表现形式,通常基于django的models. 一些不可序列化的python数据,如时间可表示为多种格式,或任何不确定的数据

    在app目录下创建 serializers.py

    from rset_framework import serializers 

    class StoreSerializer(serializers.Serializer):

      name=serializers.CharField(max_length=200)

      email=serializers.EmailField()

     serializers是一个标准的python类,这个类继承自serializers.Serializer类,这个结构同django model类和django form 类 

  • 相关阅读:
    流处理 —— Spark Streaming中的Window操作
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.8 提供带注解的限定符元数据
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.7 为自动检测组件提供作用域
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.5 在组件中定义bean的元数据
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.4 使用过滤器自定义扫描
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.3 自动检测类和注册bean的定义
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.2 元注解
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.1 @Component和深层的构造型注解
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10 类路径扫描和被管理的组件
  • 原文地址:https://www.cnblogs.com/Ting-light/p/9682583.html
Copyright © 2011-2022 走看看