Django-rest-framework 使用教程

官方快速入门教程有坑,一直找不到关于django rest framework好的书籍和好的博文,本文都是基于网上收集整理的资料

功能特性

Django REST framework(以下简称 DRF)是一个开源的 Django 扩展,提供了便捷的 REST API 开发框架,是实现前后端分离的典型案例。所谓前后端分类,即前端负责页面展示和与用户的交互,后端则负责API接口

1.功能介绍
  • 支持 OAuth 认证
  • 支持对 ORM 和非 ORM 数据源的序列化
  • 丰富的定制层级:函数视图、类视图、视图集合
  • 内置Mixins,可以用于快速组装
2.特性
  • 直观的 API web 界面。
  • 多种身份认证和权限认证方式的支持。
  • 内置了 OAuth1 和 OAuth2 的支持。
  • 内置了限流系统。
  • 根据 Django ORM 或者其它库自动序列化。
  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要。
  • 可扩展性,插件丰富。
  • 广泛使用,文档丰富。
RESTful 架构

RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用

那什么是RESTful架构呢?

(1)**每一个URI代表一种资源;**简单理解就是url指向网络上的一个信息如文本,图片,音频等,要获取这个资源只需访问这个url即可

(2)**客户端和服务器之间,传递这种资源的某种表现层;**所谓表现层即指把“资源”呈现出来的的形式,如文本(资源)可以用txt格式,html格式,json格式(表现层)来呈现。访问一个网站,客户端和服务端会传递这种表现层,以实现下一个步骤:状态转化

(3)**客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。**因为http协议是无状态协议,所有状态都保存在服务端,客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

参考文章:http://www.ruanyifeng.com/blog/2011/09/restful.html

基本概念
1.Serializer序列化

序列化器用于处理前端发来的json数据,因为前端发送给后端的是json数据,但是后端要向数据库存储数据,json数据是不被允许的.反序列化则反过来理解。

简单来说就是通过映射,把数据结构转换符合前端/后端的数据,就是充当一个翻译官的作用

(1)序列化

模板:

from django.core import serializers
data = serializers.serialize("xml", SomeModel.objects.all())

从djang.core导入它,然后调用它的serialize方法。

这个方法至少接收两个参数,第一个是你要序列化成为的数据格式,这里是‘xml’,第二个是要序列化的数据对象

class YourSerializer(Serializer):
    field1 = Field()
    def save(self, validated_data):
        # save your data here
        return saved_data
    def update(self, instance, validated_data):
        # update your instance
        return instance

序列化之后的数据保存在 serializer.data 中的,可以使用 SomeRenderer().render(serializer.data) 将其序列化为字符串对象作为 Response body 返回。

(2)反序列化

模板:

data = SomeParser().parse(incoming_stream)
serializer = YourSerializer(data=data)

if serializer.is_valid():     # 这里会根据 Serialzier 的 Field 和自定义验证工具进行数据校验
    logging.info(serializer. validated_data)
    serializer.update()        # 或者 serializer.create()

对于自定义 Serializer,你需要自己实现 createupdate 方法。

你也可以使用 serializer.save(**data)save 方法的行为取决于初始化的方式

# .save() 会创建一个新实例
serializer = CommentSerializer(data=data)

# .save() 会更新 `comment` 实例
serializer 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值