zoukankan      html  css  js  c++  java
  • Django REST framework

    web 开发有两种开发模式:

    1、前后端不分离

      前端看到的效果都是由后端控制的,后端渲染页面之后给前端返回完整的页面,前端与后端的耦合度很高。

    2、前后端分离

      后端仅返回前端所需要的数据,至于数据怎么进行展示,由前端自己进行控制,前端与后端的耦合度很低。

     

    在开发中有个细节要提一下考虑到 不同的人有不同的设计风格,

    就像钱一样,对它的评价 “褒贬不一” ,归根结底 ,源头还是在人。

    所以普遍采用的RESTful API设计风格。

     

    Restful 风格设计关键点

    1、URL地址尽量使用名词复数,不要使用动词。

    2、常见的请求方式:

      GET(获取数据),POST:(新增数据),PUT(修改),DELETE(删除)

    3、过滤参数放在查询字符串中

    4、响应的数据格式是JSON

    5、响应状态码:

      200(获取或修改成功),201(新增成功),204(用户删除数据成功),400(找不到资源),500(服务器错误)

     

    REST接口开发的核心任务

    开发REST API接口 视图主要 做了:

    1 .将请求数据(如JSON格式)转换为模型类对象 2.操作数据库 3.将模型类对象转为响应的数据(如JSON格式)

    从这三部分操作,涉及到了两个重要的概念:序列化和反序列化

    1.序列化:将对象(模型类对象)转换为字典或者JSON的过程,并返回

    2.反序列化:将字典或JSON转换保存到对象(模型类对象)的过程,并保存到数据库

    序列化器操作

    想要完成Django使用序列化器,步骤如下

    1.定义模型类

    2.定义序列化器类

    demo:

    复制代码
    # 设置Django运行所依赖的环境变量
    import os
    
    if not os.environ.get('DJANGO_SETTINGS_MODULE'):
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'BookProject.settings')  # BookProject是自己的项目名称
    
    from rest_framework import serializers
    
    
    class User(object):
        """用户类"""
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    class UserSerializer(serializers.Serializer):
        """用户序列化器类"""
        name = serializers.CharField()
        age = serializers.IntegerField()
    
    
    # 创建User对象
    user = User(name='smart', age=18)
    
    # 使用UserSerializer将user对象序列化为如下字段数据:{'name': 'smart', 'age': 18}
    serializer = UserSerializer(user)
    
    # 获取序列化之后的数据
    print(serializer.data)
    复制代码
     

    反序列化操作

    demo:

    复制代码
    from booktest.serializers import BookInfoSerializer_v2
    
    data = {'btitle': 'python', 'bpub_date': '2019-06-01'}
    serializer = BookInfoSerializer_v2(data=data) #自定义反序列化器类
    serializer.is_valid()  # 返回True
    serializer.errors  # {}
    serializer.validated_data  
    复制代码
     
     

     

  • 相关阅读:
    洛谷P2602 [ZJOI2010]数字计数 题解
    数位DP模板
    The Meaningless Game 思维题
    CF55D Beautiful numbers 数位DP
    NOIP 2016 洛谷 P2827 蚯蚓 题解
    弹性碰撞问题:Ants+Linear world
    BZOJ1294 洛谷P2566 状态压缩DP 围豆豆
    朋友HDU
    树的深度———树形DP
    CF1292C Xenon's Attack on the Gangs 题解
  • 原文地址:https://www.cnblogs.com/wy919/p/12681345.html
Copyright © 2011-2022 走看看