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自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 Vue.js
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
Vue如何实现验证码输入交互
Dec 07 Vue.js
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
深入理解Vue的数据响应式
May 15 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
vue实现input输入模糊查询的三种方式
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
ip签名探针
2006/10/09 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
yii操作session实例简介
2014/07/31 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
pywinauto自动化操作记事本
2019/08/26 Python
Python如何使用字符打印照片
2020/01/03 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
基于python检查矩阵计算结果
2020/05/21 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
平面设计师工作职责范文
2013/12/03 职场文书
淘宝店策划方案
2014/06/07 职场文书
班级体育活动总结
2014/07/05 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
2015入党个人自传范文
2015/06/26 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
详解Python生成器和基于生成器的协程
2021/06/03 Python
Python利用capstone实现反汇编
2022/04/06 Python
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers