经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
vue前端和Django后端如何查询一定时间段内的数据
来源:jb51  时间:2021/3/1 8:37:42  对本文有异议

前言

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

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

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

后端数据库

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

models.py

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

serializers.py

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

  1. class CountDownModelSerializer(serializers.ModelSerializer):
  2. class Meta:
  3. model = CountDownSign
  4. fields = '__all__'
  5.  
  6. def create(self, validated_data):
  7. return CountDownSign.objects.create(**validated_data)
  8.  
  9. def update(self, instance, validated_data):
  10. instance.name = validated_data.get('name', instance.name)
  11. instance.date = validated_data.get('date', instance.date)
  12. instance.sign = validated_data.get('sign', instance.sign)
  13. instance.save()
  14. return instance

views.py

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

  1. obj = models.CountDownSign.objects.filter(date__range=(start, end))
  1. class CountDownViewSet(ModelViewSet):
  2. parser_classes = [JSONParser, FormParser]
  3. """视图集"""
  4. queryset = models.CountDownSign.objects.all()
  5. serializer_class = CountDownModelSerializer
  6. # 搜索
  7. search_fields = ('id', 'name', 'sign', 'date')
  8. @action(methods=['post'], detail=False)
  9. def getSE(self, request, *args, **kwargs):
  10. start = request.data.get('start', None)
  11. end = request.data.get('end', None)
  12. if start and end:
  13. obj = models.CountDownSign.objects.filter(date__range=(start, end))
  14.  
  15. if obj:
  16. ser = CountDownModelSerializer(instance=obj, many=True)
  17. print(ser.data)
  18. return JsonResponse({
  19. 'code': '200',
  20. 'msg': '获取数据成功',
  21. 'data': ser.data
  22. })
  23. else:
  24. return JsonResponse({
  25. 'code': '1002',
  26. 'msg': '获取失败',
  27. })
  28. else:
  29. return Response(status=status.HTTP_204_NO_CONTENT)

前端界面

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

  1. <div class="datePicker">
  2. <div class="block" style="float: left">
  3. <el-date-picker
  4. v-model="value1"
  5. type="datetime"
  6. value-format="yyyy-MM-dd"
  7. placeholder="请选择选择开始日期">
  8. </el-date-picker>
  9. </div>
  10. <div class="block" style="float: left; margin-left: 20px;">
  11. <el-date-picker
  12. v-model="value2"
  13. type="datetime"
  14. value-format="yyyy-MM-dd"
  15. placeholder="请选择截止日期">
  16. </el-date-picker>
  17. </div>
  18. <el-button round style="float: left; margin-left: 20px;" @click="searchC">搜索</el-button>
  19. </div>

data.js

实现的接口函数

  1. export function searchCountDown(start, end) {
  2. return request({
  3. url: 'countDown/getSE/',
  4. method: 'post',
  5. data: {
  6. start: start,
  7. end: end
  8. }
  9. })
  10. }

点击事件的实现

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

  1. searchC() {
  2. console.log(this.value1);
  3. console.log(this.value2);
  4. if (this.value1 < this.value2) {
  5. searchCountDown(this.value1, this.value2).then(res => {
  6. console.log(res.data);
  7. this.searchRes = res.data;
  8. })
  9. } else {
  10. this.$message.error("时间范围出错");
  11. }
  12. },

数据展示

  1. <div class="article">
  2. <ul>
  3. <li v-for="(item,index) in searchRes">
  4. <div class="ui grid" style="width: 100%;height: 60px;">
  5. <div class="four wide column"><span>{{ item.name }}</span></div>
  6. <div class="four wide column"><span>{{ item.date }}</span></div>
  7. <div class="four wide column"><span>{{ item.sign }}</span></div>
  8. <div class="four wide column">
  9. <el-button type="danger" icon="el-icon-delete" circle @click="deleteC(item.id)"></el-button>
  10. <el-button type="primary" icon="el-icon-edit" circle></el-button>
  11. </div>
  12. </div>
  13. <div class="ui divider"></div>
  14. </li>
  15. </ul>

运行结果

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

总结

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号