vue前端和Django后端如何查询一定时间段内的数据


Posted in Vue.js onFebruary 28, 2021

前言

在开发过程中经常会遇到筛选查询之类的功能,比如查询某一个时间段内的数据而非所有数据。

这样我们就需要向后端发送时间段的参数,然后在后端处理查询。

这里以Django后端和vue前端的简单例子来记录大致实现。

后端数据库

这里是一些简单的数据重要的是date,我们需要根据日期来筛选返回到前端。

vue前端和Django后端如何查询一定时间段内的数据

models.py

class CountDownSign(models.Model):
 name = models.CharField(max_length=1000) 
 date = models.DateField() 
 sign = models.CharField(max_length=200)

serializers.py

这里引入的是drf框架,但筛选查询的思路和这个框架没有关系。

class CountDownModelSerializer(serializers.ModelSerializer):
 class Meta:
 model = CountDownSign
 fields = '__all__'

 def create(self, validated_data):
 return CountDownSign.objects.create(**validated_data)

 def update(self, instance, validated_data):
 instance.name = validated_data.get('name', instance.name)
 instance.date = validated_data.get('date', instance.date)
 instance.sign = validated_data.get('sign', instance.sign)
 instance.save()
 return instance

views.py

为筛选查询提供接口。拿到前端传递的起止日期。核心代码如下

obj = models.CountDownSign.objects.filter(date__range=(start, end))
class CountDownViewSet(ModelViewSet):
 parser_classes = [JSONParser, FormParser]
 """视图集"""
 queryset = models.CountDownSign.objects.all()
 serializer_class = CountDownModelSerializer
 # 搜索
 search_fields = ('id', 'name', 'sign', 'date')
 
 @action(methods=['post'], detail=False)
 def getSE(self, request, *args, **kwargs):
 start = request.data.get('start', None)
 end = request.data.get('end', None)
 if start and end:
  obj = models.CountDownSign.objects.filter(date__range=(start, end))

  if obj:
  ser = CountDownModelSerializer(instance=obj, many=True)
  print(ser.data)
  return JsonResponse({
   'code': '200',
   'msg': '获取数据成功',
   'data': ser.data
  })
  else:
  return JsonResponse({
   'code': '1002',
   'msg': '获取失败',
  })
 else:
  return Response(status=status.HTTP_204_NO_CONTENT)

前端界面

这里简略给出用于接收起止时间的两个date-picker,并且给搜索绑定事件。

<div class="datePicker">
 <div class="block" style="float: left">
 <el-date-picker
  v-model="value1"
  type="datetime"
  value-format="yyyy-MM-dd"
  placeholder="请选择选择开始日期">
 </el-date-picker>
 </div>
 <div class="block" style="float: left; margin-left: 20px;">
 <el-date-picker
  v-model="value2"
  type="datetime"
  value-format="yyyy-MM-dd"
  placeholder="请选择截止日期">
 </el-date-picker>
 </div>
 <el-button round style="float: left; margin-left: 20px;" @click="searchC">搜索</el-button>
 </div>

data.js

实现的接口函数

export function searchCountDown(start, end) {
 return request({
 url: 'countDown/getSE/',
 method: 'post',
 data: {
  start: start,
  end: end
 }
 })
}

点击事件的实现

判断输入的合法性,并接受数据进行数据绑定展示

searchC() {
 console.log(this.value1);
 console.log(this.value2);
 if (this.value1 < this.value2) {
 searchCountDown(this.value1, this.value2).then(res => {
  console.log(res.data);
  this.searchRes = res.data;
 })
 } else {
 this.$message.error("时间范围出错");
 }
 },

数据展示

<div class="article">
 <ul>
 <li v-for="(item,index) in searchRes">
  <div class="ui grid" style="width: 100%;height: 60px;">
  <div class="four wide column"><span>{{ item.name }}</span></div>
  <div class="four wide column"><span>{{ item.date }}</span></div>
  <div class="four wide column"><span>{{ item.sign }}</span></div>
  <div class="four wide column">
  <el-button type="danger" icon="el-icon-delete" circle @click="deleteC(item.id)"></el-button>
  <el-button type="primary" icon="el-icon-edit" circle></el-button>
  </div>
  </div>
  <div class="ui divider"></div>
 </li>
 </ul>

运行结果

可以看到返回的数据均是在时间范围内,这里的2月25号零时其实返回的数据是2月5号,因为进行了数据格式化,所以25号的数据也被返回了。

vue前端和Django后端如何查询一定时间段内的数据

总结

到此这篇关于vue前端和Django后端如何查询一定时间段内数据的文章就介绍到这了,更多相关vue和Django查询数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
如何实现vue的tree组件
Dec 03 Vue.js
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 Vue.js
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 Vue.js
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
vue 实现上传组件
May 31 Vue.js
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
Vue全局事件总线你了解吗
Feb 24 Vue.js
vue实现省市区联动 element-china-area-data插件
Apr 22 Vue.js
vue实现简易音乐播放器
Aug 14 Vue.js
vue-router路由懒加载及实现的3种方式
Feb 28 #Vue.js
vue-router懒加载的3种方式汇总
Feb 28 #Vue.js
Vue SPA 首屏优化方案
Feb 26 #Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 #Vue.js
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
Feb 26 #Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 #Vue.js
Vue基本指令实例图文讲解
Feb 25 #Vue.js
You might like
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
深入解析php之sphinx
2013/05/15 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
mysql alter table命令修改表结构实例详解
2016/09/24 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
python异常和文件处理机制详解
2016/07/19 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
幼儿园大班家长评语
2014/04/17 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
鲁冰花观后感
2015/06/10 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle