本帖最后由 杰哥,我就服你 于 2018-12-20 13:22 编辑



Django rest framework(DRF)

D:是一个用于构建Web API强大又灵活的框架,基于Django框架二次开发的

E:

①提供定义序列化器Serializer的方法,可根据ORM或其他自动序列化或反序列化

②提供丰富的类视图,Mixin扩展类,视图集,简化视图编写

③丰富的定制层级:自动生成API

④身份认证,权限认证,限流系统

⑤直观的API web界面

⑥可扩展性,插件丰富

U:

①需Python和Django

②安装DRF:pip install djangorestframework

③添加rest_framework应用:settings.py的INSTALLED_APPS添加'rest_framework'。

④创建序列化器:在serializers.py编写,继承多种类型序列化器,有相关属性方法

⑤编写视图:APIView,ModelMixin,ViewSet

⑥定义路由:创建路由对象,注册视图集,把路由器信息添加至django路由列表中

⑦启动:python manage.py runserver,有对应API Web浏览页面



序列化器(Serializer)

1.自定义型,继承rest_framework.serializers.Serializer

2.模型类型,继承rest_framework.serializers.ModelSerializer



序列化器的字段和选项类型

常用字段类型

字段
字段构造方式
BooleanField
BooleanField()
NullBooleanField
NullBooleanField()
CharField
CharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True)
EmailField
EmailField(max_length=None, min_length=None, allow_blank=False)
RegexField
RegexField(regex, max_length=None, min_length=None, allow_blank=False)
SlugField
SlugField(maxlength=50, min_length=None, allow_blank=False)

正则字段,验证正则模式 [a-zA-Z0-9-]+
URLField
URLField(max_length=200, min_length=None, allow_blank=False)
UUIDField
UUIDField(format='hex_verbose')

format:

1) 'hex_verbose' 如"5ce0e9a5-5ffa-654b-cee0-1238041fb31a"

2) 'hex' 如 "5ce0e9a55ffa654bcee01238041fb31a"

3)'int' - 如: "123456789012312313134124512351145145114"

4)'urn' 如: "urn:uuid:5ce0e9a5-5ffa-654b-cee0-1238041fb31a"
IPAddressField
IPAddressField(protocol='both', unpack_ipv4=False, **options)
IntegerField
IntegerField(max_value=None, min_value=None)
FloatField
FloatField(max_value=None, min_value=None)
DecimalField
DecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None)

max_digits: 最多位数

decimal_palces: 小数点位置
DateTimeField
DateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None)
DateField
DateField(format=api_settings.DATE_FORMAT, input_formats=None)
TimeField
TimeField(format=api_settings.TIME_FORMAT, input_formats=None)
DurationField
DurationField()
ChoiceField
ChoiceField(choices)

choices与Django的用法相同
MultipleChoiceField
MultipleChoiceField(choices)
FileField
FileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ImageField
ImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ListField
ListField(child=, min_length=None, max_length=None)
DictField
DictField(child=)

选项参数:

参数名称
作用
max_length
最大长度
min_lenght
最小长度
allow_blank
是否允许为空
trim_whitespace
是否截断空白字符
max_value
最小值
min_value
最大值

通用参数:

参数名称
说明
read_only
表明该字段仅用于序列化输出,默认False
write_only
表明该字段仅用于反序列化输入,默认False
required
表明该字段在反序列化时必须输入,默认True
default
反序列化时使用的默认值
allow_null
表明该字段是否允许传入None,默认False
validators
该字段使用的验证器
error_messages
包含错误编号与错误信息的字典
label
用于HTML展示API页面时,显示的字段名称
help_text
用于HTML展示API页面时,显示的字段帮助提示信息

创建Serializer对象

构造方法:Serializer(instance=None, data=empty, **kwarg)

参数1,序列化必须传入的模型类对象

参数2,反序列化时把数据传入data

额外参数:例如context={'XX':'XX'},可通过context属性获取



序列化注意点:

1. 序列化时如果被序列化是多条查询集,通过添加many=True,列表形式

如果关联对象有多个,也可以在序列化器字段添加many=True

2. 如果模型类存在外键字段,处理方式如下:

①PrimaryKeyRelatedField,需设置read_only=True或queryser参数

被序列化后是关联字段数据

②StringRelatedField,被序列化是关联对象__str__返回值

③HyperlinkedRelatedField,需设置read_only,view_name

被序列化为关联对象数据的API链接

④SlugRelateField,需设置read_only,slug_field

被序列化后是关联对象的指定字段数据

⑤使用关联对象的序列化器类的实例

⑥重写to_representation 可修改被序列化后的返回值



反序列化

验证:在反序列化时,对数据验证,验证成功后才可获取数据或保存为模型类对象

①调用is_valid方法验证,成功True,失败False

②验证失败时,通过序列化器对象的errors属性获取错误信息,返回字典包含字段和字段错误,如果非字段错误,可修改配置中NON_FIELD_ERRORS_KEY来控制键名

③验证成功时,通过序列化器对象的validated_date属性获取数据

注意点:带参数raise_exception=True在反序列化时is_valid()方法在验证失败时抛出serializers.ValidationError,REST framework接收到此异常,会向前端返回HTTP 400 Bad Request响应。



自定义验证行为:

1. validate_字段名:在序列化器中添加方法,方法名validate_字段名,参数为value,对value做校验,raise serializers.ValidationError('XXXX'),返回值value

2. validate:在序列化器中添加validate方法,可同时对多个字段进行验证

参数为attrs,从attrs中获取值,然后进行逻辑处理,抛出异常,返回值attrs

3.validator:在序列化器上方编写函数,参数value,对value校验,抛出异常

在序列化器字段中加入validator选项参数,为列表形式,值为函数名。

4.REST framework提供的validators:

①UniqueValidator单字段唯一:字段中设置,参数为queryset

②UniqueTogetherValidation联合唯一:class Meta中设置,参数queryset和fields



保存:如果验证成功,向基于validated_data完成数据对象的创建,可以通过create和update来实现

1.新建:在序列化器中重写create方法,参数为validate_data,

返回值为模型类.objects.create(**validated_data)

2.更新:在序列化器中重写update方法,参数instance即要更新的实例和validate_data

对validate_data字典获取其值,对无传递值给予默认值 instance.字段,并赋给instance.字段,然后调用instance.save()提交,返回值instance

注意点:

①实现了create和update方法后,在反序列化时既可以序列化对象.save()返回数据对象实例并保存或更新到数据库

②调用save时,如果有传instance实例,则调用update方法更新数据,否则调用create方法新建数据。

③调用save可传参,参数可从validated_data中获取

④如果没有传递所有required字段,会抛出验证异常,可通过使用partial=True实现部分字段更新



模型类序列化器ModelSerializer

D:可基于模型类自动生成一系列字段,会自动生成valiators和实现了默认的create和update方法

U:

class 序列化器(serializers.ModelSerializer):                               #可在这里自定义序列化器字段

         class Meta:               

                  model = 模型类名                  #参照哪个模型类               

                  fields = '__all__'        #这个代表所有字段,可以指定哪些字段,是元组类型()               

                  exclude=('XX',)         #排除哪些字段,也是元组类型               

                  depth = 1                 #默认使用主键关联,可生成简单嵌套,整数,代表嵌套层级               

                  read_only_fields= ('XX',)   #指明只读字段,即仅用于序列化输出的字段               

                  extra_kwargs={字段:{选项:值}   }  #为序列化器字段添加或修改原有的选项参数,嵌套字典类型
















DRF视图功能介绍(2)的更多相关文章

  1. drf 视图功能

    视图 drf提供的视图功能 自己的第一次封装 #一个功能写成一个类,方便组合,只要继承它就可以有这个功能 #将功能都写在一个类中,可控性就会变差 from book.myserializers imp ...

  2. DRF 视图组件

    目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的"七十二变" 第一层:基于APIview的五个 ...

  3. 带你走近AngularJS - 基本功能介绍

    带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------- ...

  4. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  5. Android Studio 经常使用功能介绍

    为了简化 Android 的开发力度,Google 决定将重点建设 Android Studio 工具.Google 会在今年年底停止支持其它集成开发环境.比方 Eclipse. Android St ...

  6. HBase的Snapshots功能介绍

    HBase的Snapshots功能介绍 hbase的snapshot功能还是挺有用的,本文翻译自cloudera的一篇博客,希望对想了解snapshot 的朋友有点作用,如果翻译得不好的地方,请查看原 ...

  7. QTP的基本功能介绍

    • QTP的基本功能介绍 HP QuickTest Professional 支持功能測试和回归測试自己主动化,用于每一个主要软件应用程序和环境.此解决方式使用keyword驱动的測试概念,简化了測试 ...

  8. ThinkPHP框架视图详细介绍 View 视图--模板(九)

    原文:ThinkPHP框架视图详细介绍 View 视图--模板(九) 视图也是ThinkPHP使用的核心部分: 一.模板的使用 a.规则 模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和 ...

  9. 使用Eclipse Memory Analyzer Tool(MAT)分析线上故障(一) - 视图&功能篇

    Eclipse Memory Analyzer Tool(MAT)相关文章目录: 使用Eclipse Memory Analyzer Tool(MAT)分析线上故障(一) - 视图&功能篇 使 ...

随机推荐

  1. Codeforces Round #584

    传送门 A. Paint the Numbers 签到. Code #include <bits/stdc++.h> using namespace std; typedef long l ...

  2. Educational Codeforces Round 76 (Rated for Div. 2)

    传送门 A. Two Rival Students 签到. Code /* * Author: heyuhhh * Created Time: 2019/11/13 22:37:26 */ #incl ...

  3. MVC(基础二)

    原文链接:https://blog.csdn.net/wuzxc520/article/details/77880783 1.网站开发介绍 2.响应流程 3.MVC 介绍 4.文件夹含义

  4. 201871010113-刘兴瑞《面向对象程序设计(java)》第十周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>htt ...

  5. Mybatis框架模糊查询+多条件查询

    一.ISmbmsUserDao层 //根据姓名模糊查询 public List<Smbms> getUser(); //多条件查询 public List<Smbms> get ...

  6. 接口测试用例yaml格式数据

    1. login.yaml yaml文件 - name # 添加减号可以把用例转为list,每一部分是一个字典 url: /api/user/login method: post data: # 存放 ...

  7. 15-Django开发REST接口

    使用Django开发REST接口 我们以在Django框架中使用的图书以及书中人物案例来写一套支持图书数据增删改查的REST API接口,来理解REST API的开发(前后端均发送JSON格式数据) ...

  8. PHP 扩展与 ZEND 引擎的整合

    PHP 扩展是对 PHP 功能的一个补充,编写完 PHP 扩展以后, ZEND 引擎需要获取到 PHP 扩展的信息,比如 phpinfo() 函数是如何列出 PHP 扩展的信息,PHP 扩展中的函数如 ...

  9. 安装 Java

    1.rpm下载地址 https://download.oracle.com/otn/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm?AuthParam=1570520 ...

  10. 鸟哥的Linux私房菜笔记第五章,文件权限与目录配置(二)

    Linux目录配置的依据--FHS 因为利用Linux来开发产品的公司太多,例如,CentOS.Ubuntu.ReHat...,导致了配置文件存放的目录没有统一的标准.后来就有了FHS(Filesys ...