最近自動運用保守プラットフォームを構築する予定なので、Django の知識を調べています。
実際のプロジェクト開発では、小さな問題に遭遇しました。フロントエンドとバックエンドの間の主流のデータ対話は JSON です。フロントエンドがサーバーにデータを転送するのは比較的簡単ですが、少し面倒なのは、サーバー側が JSON をフロントエンドに転送することです。
まず、Django はデフォルトで ORM テクノロジーを使用しますが、この種の抽象的な API には実はうんざりしています。これは、データベース テーブルを開発者向けのオブジェクトに抽象化するため、開発には便利であり、SQL ステートメントを記述する必要がありませんが、その後のプログラムでパフォーマンスのボトルネックの原因にもなります (トラブルシューティングを再度実行したときに、70 行の SQL に遭遇しました)ステートメント...) 運用保守担当者にとって、純粋な SQL は基本的な能力であり、ORM の構文を学習すると学習コストが増加します。
それはともかく、今回のテーマはデータベースから取得したデータをJSONに変換することです。以下ではORMとSQLの両方のメソッドを共有します。
1. Django モデルレイヤーと ORM テクノロジーを使用して JSON 形式に変換します
1 def getdata(request):2 # 使用ORM3 # all()返回的是QuerySet 数据类型;values()返回的是ValuesQuerySet 数据类型4 data = models.VM.objects.values('id', 'ip', 'host', 'username')5 data = serializers.serialize("json", tomcats)6 return JsonResponse(list(data), safe=False)
2. Django モデルレイヤーを完全に放棄し、純粋な SQL を JSON 形式に変換します
1 def getdata(request):2 # 使用SQL3 with connection.cursor() as cursor:4 cursor.execute('select id, machine, tomcathome, ipaddress, description from tomcatData')5 data = dictfetchall(cursor)6 return JsonResponse(data, safe=False, json_dumps_params={'ensure_ascii': False})
JsonResponse オブジェクト:
class <span class="highlighted">JsonResponse</span>
(data) 、encoder=DjangoJSONEncoder、safe=True、json_dumps_params=None、**kwargs)
このクラスは、HttpRespon のサブクラスです。そのデフォルトの Content-Type は、アプリケーションに設定されます。 /json
2. 最初のパラメータである data は、辞書型である必要があります。安全なパラメータが False に設定されている場合、リスト、タプルなどの JSON 形式に変換できる任意のオブジェクトをデータに入力できます。 、 セット。 デフォルトの安全なパラメータは True です。渡したデータ型が辞書型ではない場合、TypeError 例外がスローされます。
3. json_dumps_params パラメーターは辞書であり、 json.dumps() メソッドを呼び出し、辞書内のパラメーターをメソッドに渡します。
上記の説明により、上記 2 つのメソッドの JsonResponse() で渡されるパラメーターは非常に明確です。
このように、データはJSON形式でフロントエンドに渡され、フロントエンドはAJAXを利用して取得し、加工したり表示したりすることができます。
以上がデータベースデータをJSON形式に変換する例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。