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 element实现表格合并行数据
Nov 30 Vue.js
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
vue实现简易的双向数据绑定
Dec 29 Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
vue3.0封装轮播图组件的步骤
Mar 04 Vue.js
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
vue3中provide && inject的使用
Jul 01 Vue.js
vue中 this.$set的使用详解
Nov 17 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 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网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
Zend Framework教程之Autoloading用法详解
2016/03/08 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
Prototype Template对象 学习
2009/07/19 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
如何编写jquery插件
2017/03/29 jQuery
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
Python中的self用法详解
2019/08/06 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
python 模拟登陆163邮箱
2020/12/15 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
中学生期末评语
2014/02/03 职场文书
中专自我鉴定
2014/02/05 职场文书
写给老婆的检讨书
2014/02/21 职场文书
和谐社区口号
2014/06/19 职场文书
奖励通知
2015/04/22 职场文书
起诉书范文
2015/05/20 职场文书
mysql配置SSL证书登录的实现
2021/09/04 MySQL