博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django rest framework
阅读量:6578 次
发布时间:2019-06-24

本文共 3136 字,大约阅读时间需要 10 分钟。

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 类 

转载于:https://www.cnblogs.com/Ting-light/p/9682583.html

你可能感兴趣的文章
黑马程序员__反射总结
查看>>
Scala学习笔记(5)-类和方法
查看>>
Quartz原理
查看>>
完全卸载oracle|oracle卸载|彻底卸载oracle
查看>>
垃圾收集基础
查看>>
Docker安装及基本命令
查看>>
控制namenode检查点发生的频率
查看>>
Linux存储挂载后,无法正常卸载的解决方法
查看>>
2、递归遍历文件夹下每一个文件
查看>>
Remove auto_increment from Schema Dumps (mysqld...
查看>>
解决activity加上Theme.Translucent.NoTitleBar 页面跳转显示桌面
查看>>
php类库
查看>>
浅谈Java中的对象和引用
查看>>
SQL 注入自我总结
查看>>
Linux线程
查看>>
Exchange Server 2013 系列八:邮箱服务器角色DAG实战
查看>>
一个有趣的命令
查看>>
我的友情链接
查看>>
已发布13集网站开发技术视频:http://blog.sina.com.cn/s/blog_67d27f340102vf7l.html
查看>>
Mysql ibdata 丢失或损坏如何通过frm&ibd 恢复数据
查看>>