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中使用mockjs代码实例
Nov 25 Vue.js
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
vue3.0 项目搭建和使用流程
Mar 04 Vue.js
Vue3 Composition API的使用简介
Mar 29 Vue.js
HTML+VUE分页实现炫酷物联网大屏功能
May 27 Vue.js
vue+springboot实现登录验证码
May 27 Vue.js
vue Element-ui表格实现树形结构表格
Jun 07 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 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
详解PHP中的Traits
2015/07/29 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
javascript 页面划词搜索JS
2009/09/28 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
Python进阶之递归函数的用法及其示例
2018/01/31 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
Python 操作 MySQL数据库
2020/09/18 Python
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
法律专业应届本科毕业生求职信
2013/10/25 职场文书
幼儿园安全责任书
2014/04/14 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书