vueフロントエンドとDjangoバックエンドはどうやって一定期間のデータを調べますか?


前言
開発過程では、フィルタクエリなどの機能がよくあります。例えば、ある時間帯のデータを調べて、すべてのデータではありません。
このようにして、私たちはバックエンドに時間帯のパラメータを送信し、バックエンドでクエリーを処理する必要があります。
ここではDjangoバックエンドとvueフロントエンドの簡単な例を記録して大体実現します。
バックエンドデータベース
ここでは簡単なデータがいくつかありますが、重要なのはdateです。日付によって選別してフロントエンドに戻る必要があります。

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
view.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)
フロントインターフェース
ここでは、停止時間を受信するための2つの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日0時に戻ったデータは2月5日です。データフォーマットが行われたので、25日のデータも戻りました。

締め括りをつける
ここで、vueのフロントエンドとDjangoバックエンドについて、一定の時間内にデータを検索する記事を紹介します。もっと関連したvueとDjangoのデータの内容は以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。