首页 > 其他分享 >Django REST framework

Django REST framework

时间:2023-08-09 19:13:22浏览次数:36  
标签:调用 模型 校验 REST Django framework 检验 器中 序列化

简介

  在 Django 框架基础之上,进行二次开发

  用于构建 Restful API

  简称为 DRF 框架 或 REST framework

 

特性

  提供了强大的 Serialize 序列化器,可以高效进行序列化与反序列化操作

  提供了极为丰富的类视图、Mixin 扩张类、ViewSet 视图集

  提供了直观的 Web API 界面

  多种身份认证喝权限认证

  强大的排序、过滤、分页、搜索、限流等功能

  可扩展性,插件丰富

  

安装与配置

  pip install djangorestframework

  pip install markdown

  在setting.py 配置

  INSTALLED_APPS = [

    ' rest_framework ',

  ]

 

在子应用中创建一个 serialize 序列化器

  1、继承 Serializer 类或者子类

  2、定义的序列化器字段,默认既可以进行序列化输出,也可以进行序列化输入

  3、需要在前端输出哪些数据则在序列化器中定义类属性

  4、若设置 read_only = True ,指定该字段只能进行序列化输出

  5、若设置 write_only = True,则指定该字段只能进行反序列化输入,但不进行序列化输出

  6、在序列化器字段定义时,通过  validators 字段选项添加校验器,校验器可以使用restframework 自带的,或者自定义校验器

    a、字段校验器的校验顺序:字段定义时的限制(包含validator 列表条目从左到右进行校验)--> 单字段的校验(validate_字段名)--> 多字段联合校验(validate)

       b、在序列化器中自定义单字段检验器,命名规则:validate_字段名

    c、在序列化器中自定义多字段检验器,命名规则:validate,参数:attrs

  7、不在视图对数据库进行增删改查操作,在序列化器中操作定义,

    如:在view.py 文件中,如果在创建序列化器对象时,只给data传参,那么调用 serializer.save()实际就是调用序列化对象的 create()

  8、保存或更新数据库模型

    

      校验器的调用

           

      单字端校验器

      

       多字段校验器

        

       在序列化器中进行数据库操作

          

      自定义检验器

          

 

 简化序列化器类的定义,直接继承模型序列器

  功能:

    基于模型类自动生成一系列字段

    基于模型类自动为 Serializer 生成 validators ,比如unique_together

    包含默认的 create() 和update()的实现

  步骤:

    1、在元类中,指定参考哪一个模型类来创建

    2、在元类中,指定为模型类的哪些字段,来生成序列化器,field 字段为指定需要哪些模型字段,exclude 字段为指定模型中的哪些字段不需要

    3、在元类中,read_only_fields 指定某些模型字段为只输出

    4、在元类中,针对某个字段的添加或者修改或包含一些错误信息提示,则需要 extra_kwargs 

    5、若需要指定某个字段需要检验器,则在元类之前定义

         

          extra_kwargs 字段

               

 

 

 在子应用的view 文件中调用序化器

  1、通过模型类对象(或者查询集),传给instance参数即可进行序列化操作

  2、通过传递 序列化器对象的data属性参数,即可以获取转化之后的字典。总结:传参data 是反序列化,instance 是序列化

  

   3、反序列化器中,检验前端输入的数据,调用序列化器对象的 is_valid ()来检验前端参数

    如果检验成功,则返回True,否则校验失败返回False

    设置 is_valid() 参数 raise_exception = True ,那么检验失败之后会抛出异常

    当调用 is_valid () 后,才可以调用 errors 属性,获取检验失败的错误提示

            

     当校验成功之后的数据,可以使用 validated_data 属性来获取

        

    在创建序列化器对象时,同时给 instance 和 data 传参,那么调用save()会自动调用序列化器对象的update()

                           

 

    序列化器的save()调用

        

    

 

标签:调用,模型,校验,REST,Django,framework,检验,器中,序列化
From: https://www.cnblogs.com/lili37/p/17617767.html

相关文章

  • django的queryset和objects对象
    1.queryset是查询集,就是传到服务器上的url里面的内容。Django会对查询返回的结果集QerySet进行缓存,这里是为了提高查询效率。  也就是说,在你创建一个QuerySet对象的时候,Django并不会立即向数据库发出查询命令,只有在你需要用到这个QuerySet的时候才回去数据库查询。2.Objects......
  • - 推导分页的原理 - 使用分页类(器) - cookie和session的介绍、token - Django操作coo
    推导分页原理分页:当我们要展示的数据特别多的时候,一页展示不完,这个时候我们需要把要展示的数据分成多页展示分页中需要的几个参数:1.总数据有多少条2.每页展示多少条数据(自己规定的20)3.一共展示多少页4.总页数=总数据量/每页展示多少条数据5.当前第几页(前端传过去的)......
  • Django博客开发教程:使用富文本编辑器添加数据
    在Djangoadmin后台添加数据的时候,文章内容文本框想发布一篇图文并茂的文章需就得手写Html代码,这十分吃力,也没法上传图片和文件。这显然不是我等高大上程序猿想要的。为提升效率,我们可以使用富文本编辑器添加数据。支持Django的富文本编辑器很多,这里我推荐使用DjangoUeditor,Uedi......
  • Django之Model操作数据库
    ORM简介O(objects):类和对象。R(Relation):关系,关系数据库中的表格。M(Mapping):映射。DjangoORM框架的功能:建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。根据设计的模型类生成数据库中的表格。通过方便的配置就可以进行数据库的切换。数据库的......
  • django ORM操作
    fromdjango.contrib.auth.modelsimportUserfromdjango.db.modelsimportQfromdjango.db.models.functionsimportLowerfromapp.modelsimport *添加操作a、使用create方式方式一:Publish.objects.create("name"="人民出版社",city="北京"}方式二:......
  • django 模板
    模板继承模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量{%extends'base.html'%}base.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>{%blocktitle%}{%endblock%}<......
  • django响应html
    fromdjango.templateimportTemplate,Context,loaderdefindex(req): t=loader.get_template("index.html") c=Context({}) #returnHttpResponse(loader.get_template("index.html").render({})) returnHttpResponse(t.render(c))def......
  • 推导分页的原理,分页类的使用,cookie和session的介绍(重要),Django操作cookie
    推导分页的原理分页:当我们要展示的数据特别多的时候,一页展示不完,这个时候我们需要把要展示的数据分成多页展示分页中需要的几个参数:1.总数据有多少条2.每页展示多少条数据(自己规定的20)3.一共展示多少页4.总页数=总数据量/每页展示多少条数据5.当前第几页(前端......
  • django自定义过滤器
    https://docs.djangoproject.com/zh-hans/3.1/howto/custom-template-tags/代码布局自定义的tags和filters会保存在模块名为 templatetags 的目录内。模块文件的名字即稍候你用来加载tags的名字,所以小心不要采用一个可能与其它应用自定义的tags和filters冲突的名......
  • Django 离线脚本(数据库添加admin用户)
     importosimportsysimportdjangobase_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.append(base_dir)os.environ.setdefault('DJANGO_SETTINGS_MODULE','day06order.settings')django.setup()fromwebimportmodels......