Vue フロントエンドと Django バックエンドを使用して、一定期間内のデータをクエリする方法

Vue フロントエンドと Django バックエンドを使用して、一定期間内のデータをクエリする方法

序文

開発プロセスでは、すべてのデータではなく特定の期間内のデータをクエリするなど、クエリのフィルタリングなどの機能に頻繁に遭遇します。

このように、期間パラメータをバックエンドに送信し、バックエンドでクエリを処理する必要があります。

ここでは、Django バックエンドと Vue フロントエンドの簡単な例を使用して、一般的な実装を記録します。

バックエンドデータベース

ここにいくつかの簡単なデータがあります。重要なのは日付です。日付に基づいてフィルタリングし、フロントエンドに返す必要があります。

モデル.py

クラス CountDownSign(models.Model):
 名前 = models.CharField(最大長=1000) 
 日付 = models.DateField() 
 符号 = models.CharField(最大長=200) 

シリアライザー.py

ここでは drf フレームワークが紹介されていますが、クエリをフィルタリングするという考え方はこのフレームワークとは何の関係もありません。

クラス CountDownModelSerializer(serializers.ModelSerializer):
 クラスメタ:
 モデル = カウントダウンサイン
 フィールド = '__すべて__'

 def create(self, 検証済みデータ):
 CountDownSign.objects.create(**validated_data) を返します。

 def update(self, インスタンス, 検証済みデータ):
 インスタンス名 = 検証済みデータ.get('名前', インスタンス名)
 インスタンスの日付 = 検証済みデータ.get('日付', インスタンスの日付)
 インスタンスのサイン = 検証済みデータ.get('サイン', インスタンスのサイン)
 インスタンスを保存()
 インスタンスを返す

ビュー.py

クエリをフィルタリングするためのインターフェースを提供します。フロントエンドから提供される開始日と終了日を取得します。コアコードは以下のとおりです

obj = models.CountDownSign.objects.filter(date__range=(開始、終了))
クラス CountDownViewSet(ModelViewSet):
 parser_classes = [JSONParser、FormParser]
 「ビューセット」
 クエリセット = models.CountDownSign.objects.all()
 serializer_class = カウントダウンモデルシリアライザー
 # 検索 search_fields = ('id', 'name', 'sign', 'date')
 
 @action(メソッド=['post'], 詳細=False)
 def getSE(self, request, *args, **kwargs):
 開始 = request.data.get('開始', なし)
 end = request.data.get('end', なし)
 開始と終了の場合:
  obj = models.CountDownSign.objects.filter(date__range=(開始、終了))

  オブジェクトの場合:
  ser = CountDownModelSerializer(インスタンス = obj、多数 = True)
  印刷(ser.data)
  JsonResponseを返す({
   'コード': '200',
   'msg': 'データが正常に取得されました',
   'データ': ser.data
  })
  それ以外:
  JsonResponseを返す({
   'コード': '1002',
   'msg': '取得に失敗しました',
  })
 それ以外:
  レスポンスを返す(ステータス=status.HTTP_204_NO_CONTENT)

フロントエンドインターフェース

開始時刻と終了時刻を受け取り、検索のイベントをバインドするための 2 つの日付ピッカーを次に示します。

 <div class="datePicker">
 <div class="block" style="float: left">
 <el-日付ピッカー
  v-model="値1"
  タイプ="datetime"
  値の形式="yyyy-MM-dd"
  placeholder="開始日を選択してください">
 </el-date-picker>
 </div>
 <div class="block" style="float: left; margin-left: 20px;">
 <el-日付ピッカー
  v-model="値2"
  タイプ="datetime"
  値の形式="yyyy-MM-dd"
  placeholder="期限を選択してください">
 </el-date-picker>
 </div>
 <el-button round style="float: left; margin-left: 20px;" @click="searchC">検索</el-button>
 </div>

データ

実装されたインターフェース関数

エクスポート関数 searchCountDown(start, end) {
 リクエストを返す({
 url: 'countDown/getSE/',
 メソッド: 'post'、
 データ: {
  開始: 開始、
  終了: 終了
 }
 })
}

クリックイベントの実装

入力の正当性を判定し、データバインディング表示のためにデータを受け入れる

検索C() {
 コンソールにログ出力します。
 コンソールにログ出力します。
 (this.value1 < this.value2) の場合 {
 searchCountDown(this.value1, this.value2).then(res => {
  コンソールにログ出力します。
  this.searchRes = res.data;
 })
 } それ以外 {
 this.$message.error("時間範囲エラー");
 }
 },

データ表示

 <div class="article">
 <ul>
 <li v-for="(item,index) in searchRes">
  <div class="ui grid" style="幅: 100%;高さ: 60px;">
  <div class="4 列幅"><span>{{ item.name }}</span></div>
  <div class="4 列幅"><span>{{ item.date }}</span></div>
  <div class="4 列幅"><span>{{ item.sign }}</span></div>
  <div class="4 列幅">
  <el-button type="danger" icon="el-icon-delete" 円 @click="deleteC(item.id)"></el-button>
  <el-button type="primary" icon="el-icon-edit" 円></el-button>
  </div>
  </div>
  <div class="ui ディバイダー"></div>
 </li>
 </ul>

運用結果

返されたデータはすべて時間範囲内であることがわかります。ここで、2月25日0:00に返されたデータは、実際には2月5日のデータです。データがフォーマットされているため、25日のデータも返されます。

要約する

これで、Vue フロントエンドと Django バックエンドを使用して、一定期間内のデータをクエリする方法についての記事は終了です。Vue と Django のデータクエリに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • DjangoとVueの構文の競合に対する完璧な解決策
  • Django+Vue.js でフロントエンドとバックエンドを分離したプロジェクトを構築する例
  • DjangoとVue間のデータインタラクションを実装する方法
  • Django と Vue を使用したデータ操作の方法と手順
  • Django+Vue クロスドメイン環境設定の詳細な説明

<<:  MySQL NULLデータ変換方法(必読)

>>:  nginx で複数の仮想ホストを設定する方法の例

推薦する

遭遇したいくつかのブラウザ互換性の問題について簡単に説明します

背景ブラウザの互換性の問題を解決するのは非常に面倒なことです。高度な技術はそれほど必要ありませんが、...

Linux ifconfig コマンドの使用

1. コマンドの紹介ifconfig (ネットワーク インターフェイスを構成する) コマンドは、ネッ...

js はマウスインとマウスアウトによるカード切り替えコンテンツを実装します

この記事では、マウスでカード内外のコンテンツを切り替えるためのjsの具体的なコードを紹介します。具体...

CentOS 8で自動更新を設定するための手順を完了する

データとコンピューターに対してできる最善のことは、それらを安全に保つことです。アップデートを有効にす...

Vue の echarts ツールチップにクリック イベントを追加する詳細な説明

目次必要回避策1. ツールチップを設定する2. hookToolTip変数を定義する3. メソッド内...

MySQLストアドプロシージャにおけるカーソル(DECLARE)の原理と使い方の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャにおけるカーソル (DECLARE) ...

ウェブレッスンプラン、初心者向けレッスンプラン

指導トピックウェブページ適用グレード高校2年生授業時間1 クラス教科書分析焦点: 静的および動的ウェ...

vuex での mapState の考え方の応用

目次1. マップ方式2. 応用背景:需要開発プロセス中に、一部のインターフェースは、ページに表示する...

Linuxにgitをインストールする方法

1. はじめにGit は、規模の大小を問わずあらゆるプロジェクトを俊敏かつ効率的に処理するために使用...

JavaScriptで計算機機能を実現するプロセスの詳細な説明

目次1. 電卓機能の紹介2. 計算機ページのデザイン1. ナビゲーションバー2. データ部分3. i...

Linux でローカル コンピューターとリモート サーバーのポートが接続されているかどうかを確認する方法

以下のように表示されます。 1. ssh -v -p [ポート番号] [ユーザー名]@[IPアドレス...

ウェブページのメモリとCPU使用量を削減する方法

<br />Web ページによっては、サイズは大きくないように見えても開くのに非常に時間...

Linux の PHP に XML 拡張機能をインストールする詳細な手順

PHP Linux に XML 拡張機能をインストールする1. PHPインストールソースパッケージを...

MySQL 5.7.16 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

Ubuntu 16.04 に MySQL 5.7 をインストールするにはどうすればいいですか?メイ...

JavaScriptはボタンをクリックして4桁のランダムな検証コードを生成します

この記事の例では、ボタンをクリックすることで4桁のランダムな検証コードを生成するjsの具体的なコード...