当前位置: 首页 > news >正文

交通运输网站建设的方案中信建设有限责任公司钱三强

交通运输网站建设的方案,中信建设有限责任公司钱三强,分类导航wordpress,wordpress主题简rest_framework接口开发流程及接口功能组成 使用restframework框架开发接口#xff0c;方式应该有6、7种#xff0c;每个人的习惯不同#xff0c;用的方法也不一样#xff0c;再次不再一一详述。 我比较常用#xff1a;ModelSerializerGenericAPIView 原因是用视图函数装饰…rest_framework接口开发流程及接口功能组成 使用restframework框架开发接口方式应该有6、7种每个人的习惯不同用的方法也不一样再次不再一一详述。 我比较常用ModelSerializerGenericAPIView 原因是用视图函数装饰器、视图类继承APIView、或者混入Mixin这三种封装层次有点低用一个封装层次低的接口通常意味着你需要写更多的代码后期也需投入更多的精力去维护它当然好处是写出来的代码比较容易看懂而使用ViewSets(视图集)则刚好相反ViewSets封装了GenericAPIView它显得有些画蛇添足过高的封装层次可能会让你感到云里雾里当然好处是用熟了之后会很爽。 所以在能理解和接受的程度与接口封装的层次两方面来权衡我选择了GenericAPIView来写视图ModelSerializer当然也比单纯的Serializer更好用写更少的代码做更多的事。 1 Django rest_framework开发的一个符合RESTful标准的接口组成及功能 Django框架它整个采用的是MVT的架构这三部分各司其职由M负责与数据库的实际交互V负责业务逻辑T负责接受请求与展示响应(实际就是前端)。那我们可以这么理解只要有一个东西它具备了接受请求(入参)与展示响应(返回值)的功能我们就可以把它当成T因为它具备了T的功能。前后端不分离的时候一切都是那么的美好。 当前后端分离的时候我们突然发现T不见了。那么谁来充当T的角色呢没错是Serializer(负责接受请求与展示响应)。这样一来前后端分离与不分离就有了一个统一的架构也即一个接口通常由三大主要的部分组成模型、视图、序列化器。 1.1 模型M(models.py) 在Django框架的MVT架构中M承担了与数据库进行交互的功能但是由于我们用的是ORM所以只需要将python对象映射到数据模型即可也就是定义python对象并在该对象中声明相应的字段。需要注意的一点是在定义python对象之前需要先绘制ER图明确实体间的关系确保每一个实体都至少遵循第三范式(3NF)。 说明前后端分离与不分离models并没有什么区别1.2 序列化器T(Serializers.py) 前后端不分离的时候T其实就是前端接受请求并返回响应数据。 前后端分离的时候序列化器承担了这个功能接受前端请求返回响应数据。 如果使用ModelSerializer来定义序列化器那么它大概长这个样子 序列化器 from rest_framework import serializers from .models import * import reclass MyModelSerializer(serializers.ModelSerializer):MyModel 序列化器class Meta:model 模型fields 接口入参extra_kwargs 入参的约束model MyModelfields (name, mobile)extra_kwargs {mobile: {write_only: True,min_length: 8,max_length: 16,}}def validate_name(self, name):对name的校验if User.objects.filter(usernameusername).count():raise serializers.ValidationError(该用户名已被注册)return namedef validate_mobile(self, mobile):判断手机号格式判断手机号是否已注册# 注册if User.objects.filter(mobilemobile).count():raise serializers.ValidationError(该手机号已被注册)# 判断手机号码格式是否有误REGEX_MOBILE 1[358]\d{9}$|^147\d{8}$|^176\d{8}$# 格式if not re.match(REGEX_MOBILE, mobile):raise serializers.ValidationError(手机号格式有误)return mobiledef create(self, validated_data):validated_data 通过校验的数据 是一个字典Serializer中重写create可以对数据做一些修改最终将返回一个实例 该实例会给到对应的视图Viewuser super().create(validated_data)# Your codereturn user在序列化器Serializer中容易让人感到困惑的可能就是前端字段校验这一块。其实我们回到Serializers的功能接受前端请求返回响应数据就能明白为什么它要序列化与反序列化。 序列化python对象转变为可传输(可被用于前端渲染)的JSON格式(也可能是xml等)字符串究其原因是因为我们用的ORM第一步ORM读数据拿出来的是一个查询集(set对象)需要把它变成前端喜欢的样子。反序列化字符串变为python对象。从前端得到的入参必然是字符串格式想要把它存到数据库里还得靠ORM但是ORM喜欢的是python对象所以需要一个反序列化的过程。 在反序列化的过程中我们不希望用户输入一些非法的参数所以要在Serializer中定义入参的约束与自定义的校验方式校验通过则返回一个模型的实例给视图否则返回错误信息。 这就是Serializer的功能与Model及View之间的关系。 1.3 视图V(views.py) 模型和序列化器固然重要但是视图才是核心因为通常情况下业务逻辑都集中在views中由视图完成。 在视图中你可以通过重写get/create方法完成业务逻辑。 如果你像我一样使用的是GenericAPIView来写视图函数那么你的View应该长这个样子 class MyModelCreateView(generics.CreateAPIView):创建视图# permission_classes [permissions.IsAuthenticated]queryset MyModel.objects.all()serializer_class MyModelSerializerdef post(self, request, *args, **kwargs):重写post 四核可以不用重写serializer_data MyModelSerializer(datarequest.data)if serializer_data.is_valid():return super().post(request, *args, **kwargs)else:return Response(serializer_data.errors)def create(self, request, *args, **kwargs):重写create 写自己的业务逻辑如果继承的是ListAPIView 就重写create# 获取前端传入的数据field request.POST.get(xx)# Your codereturn JsonResponse(data{data: data,msg: OK,code: 1,},safeFalse) 重写create/get方法时通过reques获取从前端传过来的入参拿到入参之后你就可以写自己的业务逻辑了。 2 Django DRF 接口开发步骤 模型设计需要注意关系规范化序列化器需要知道哪些是入参分别需要怎样的约束视图写业务逻辑、权限配置、过滤查询分页等 我通常是先写模型然后是序列化器最后再写业务逻辑以及接口的其他功能每个人的方法可能不同也就不详述了。
http://www.yutouwan.com/news/273367/

相关文章:

  • 装修设计公司logo广州seo关键词优化外包
  • 六盘水住房和城乡建设部网站做婚恋网站有哪些
  • 南京明月建设集团网站桂林漓江船票官网订票
  • 上海网站制作最大的公司wordpress被篡改文件
  • 正规企业网站开发使用方法ps做图 游戏下载网站
  • 网站推广服务报价表门户网站软文
  • 温建设文件发布在哪个网站在线设计网站排名
  • 网站开发先学什么中国建设网站红黑榜名单
  • 佘山网站建设wordpress 会员分销
  • 门户网站后台管理系统黄页推广app软件
  • 马鞍山做网站公司排名百度seo代理
  • 霸州住房和城乡建设厅网站网站开发环境的配置
  • 做网站的网页用什么软件好网站建设主流编程软件
  • 国外做任务网站有哪些定制建站
  • wordpress多站点模式杭州富阳网站建设公司
  • 网站开发需要学php吗贵阳网站如何推广
  • 强生公司营销网站为什么要这样做写作网站哪个比较赚钱
  • 域联网站建设小网站关键词
  • 湘潭做网站价格品牌磐石网络做网站联系
  • vip视频解析网站建设泉州网上房地产
  • 美食网站建设项目分析报告百度seo wordpress插件
  • 做营销最好的网站源码普通网站成微网站开发
  • 河北建设集团有限公司网站win2003做网站
  • 宁波网站关键词排名推广wordpress 轻博客 主题
  • 梁山县网站建设网站搭建设计
  • php是用来做网站的吗网站建设费用详细表
  • 福州网站建设优化wordpress农业模板
  • 电子商务网站建设也管理网站建设毕业设计论文
  • 网站运营与管理的对策建议网站主页设计布局
  • 福州企业网站维护价格低建设公司营销网站