Django 2.1.7クエリデータはjsonフォーマットの実現に戻ります。
需要問題
日常の作業では、フロントエンドからの要求に対して、バックエンドdjangoはほとんどjson形式で戻ります。テンプレートを使ってビューに戻る方法もあります。
テンプレートでビューに戻る方法は確かに便利ですが、動静分離、ajax要求などがあれば、djangoはjson形式のデータに戻るしかないです。
そこで、djangoをデータベースモデルクラスから調べたデータをjson形式でフロントエンドに戻すにはどうすればいいかという問題を持ってきました。
そして先端が読み取って戻ってきたデータを取得すると?
環境の説明フロントエンドは、jqueryを用いてajax要求 を送信する。 python 3.7.2 django 2.7 例をあげて説明する
この例はまず、簡単なページを書いてajax要求を送信し、バックエンドはどのように複数の行のデータを返すかを説明します。
フロントエンドコード
まず、簡単なフロントエンドページ
バックグラウンドは直接サーバーの情報を調べて、複数のjsonデータを返します。
クラスビューのコードを以下のように実現します。
ここで、post要求パラメータを取得する方法は簡単であり、依然として
ブラウザテスト機能は以下の通りです。
ブラウザのコンソールからバックエンドが戻ってくる結果データを見ることができます。
しかし、このように直接フロントエンドに戻るのは、タスクの制約がないので、フロントエンドとの相互作用に関するフォーマット制約を追加します。
前後端制約がデータフォーマットに戻ります。
バックエンドは制約されたフォーマットでJsonデータに戻ります。
このようにフロントエンドに戻ると、各データオブジェクトはfields、model、pkの3つのオブジェクトを含み、それぞれフィールド、モデル、キーを表します。すべてのフィールドだけを含む辞書オブジェクトが欲しいです。
バックエンドを修正し、各modelオブジェクトをdict辞書オブジェクトに変換します。
このようにフロントエンドに渡すと辞書の対象になります。
最後に、フロントエンドjsがjsonフォーマットデータを遍歴する例を与える。
フロントエンドを巡回して返したJsonフォーマットのデータ例
ここでは、Django 2.17クエリのデータをjson形式の実現に戻る記事を紹介します。これまでの記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。
日常の作業では、フロントエンドからの要求に対して、バックエンドdjangoはほとんどjson形式で戻ります。テンプレートを使ってビューに戻る方法もあります。
テンプレートでビューに戻る方法は確かに便利ですが、動静分離、ajax要求などがあれば、djangoはjson形式のデータに戻るしかないです。
そこで、djangoをデータベースモデルクラスから調べたデータをjson形式でフロントエンドに戻すにはどうすればいいかという問題を持ってきました。
そして先端が読み取って戻ってきたデータを取得すると?
環境の説明
この例はまず、簡単なページを書いてajax要求を送信し、バックエンドはどのように複数の行のデータを返すかを説明します。
フロントエンドコード
まず、簡単なフロントエンドページ
test_ajax.html
を作成します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/js/jquery-3.0.0.min.js"></script>
<script>
$(function () {
$('#search_server').click(function () {
//
var server_name = $('#server_name').val();
console.log('server_name = ' + server_name);
// ajax post
$.ajax({
url: "/assetinfo/test_ajax",
type: 'POST',
data: {
"tag": "search_project",
"server_name": server_name,
},
dataType: "json",
async: false,
//
success: function (data) {
console.log(data);
},
//
error: function () {
alert(" ");
}
})
})
})
</script>
</head>
<body>
<input type="text" id="server_name">
<button id="search_server"> </button>
</body>
</html>
実現した機能は簡単で、入力ボックスの内容だけを取得して、提出ボタンをクリックしてajaxのpost要求を送信すればいいです。バックグラウンドは直接サーバーの情報を調べて、複数のjsonデータを返します。
クラスビューのコードを以下のように実現します。
from django.core import serializers
from django.http import HttpResponse
from assetinfo.models import ServerInfo
# ex: /assetinfo/test_ajax
class TestAjax(View):
def get(self,request):
""" html """
return render(request,'assetinfo/test_ajax.html')
def post(self,request):
""" ajax post """
servers = ServerInfo.objects.all() #
json_data = serializers.serialize('json', servers) # json
return HttpResponse(json_data, content_type="application/json") # json
バックグラウンドコードでは、post要求のパラメータを取得していません。パラメータクエリーの操作を行います。このように、Json形式のデータを返す方法だけを示します。ここで、post要求パラメータを取得する方法は簡単であり、依然として
request.POST.get(' ')
であればよい。ブラウザテスト機能は以下の通りです。
ブラウザのコンソールからバックエンドが戻ってくる結果データを見ることができます。
しかし、このように直接フロントエンドに戻るのは、タスクの制約がないので、フロントエンドとの相互作用に関するフォーマット制約を追加します。
前後端制約がデータフォーマットに戻ります。
{"resCode": '0', "message": 'success',"data": []}
この制約フォーマットに従って、クエリーの結果はdata
の配列に置くべきである。バックエンドビューコードを変更します。バックエンドは制約されたフォーマットでJsonデータに戻ります。
from django.core import serializers
from django.http.response import JsonResponse
from assetinfo.models import ServerInfo
# ex: /assetinfo/test_ajax
class TestAjax(View):
def get(self,request):
""" html """
return render(request,'assetinfo/test_ajax.html')
def post(self,request):
""" ajax post """
#
result = {"resCode": '0', "message": 'success',"data": []}
#
servers = ServerInfo.objects.all()
# Python
result["data"] = serializers.serialize('python', servers)
return JsonResponse(result)
ブラウザのテストは以下の通りです。このようにフロントエンドに戻ると、各データオブジェクトはfields、model、pkの3つのオブジェクトを含み、それぞれフィールド、モデル、キーを表します。すべてのフィールドだけを含む辞書オブジェクトが欲しいです。
バックエンドを修正し、各modelオブジェクトをdict辞書オブジェクトに変換します。
from django.core import serializers
from django.http.response import JsonResponse
from django.forms.models import model_to_dict
# ex: /assetinfo/test_ajax
class TestAjax(View):
def get(self,request):
""" html """
return render(request,'assetinfo/test_ajax.html')
def post(self,request):
""" ajax post """
#
result = {"resCode": '0', "message": 'success',"data": []}
#
servers = ServerInfo.objects.all()
# model dict , data list
for server in servers:
server = model_to_dict(server) # model dict
server['server_used_type_id'] = serializers.serialize('python', server['server_used_type_id']) # ,
result["data"].append(server)
return JsonResponse(result)
ブラウザのテストは以下の通りです。このようにフロントエンドに渡すと辞書の対象になります。
最後に、フロントエンドjsがjsonフォーマットデータを遍歴する例を与える。
フロントエンドを巡回して返したJsonフォーマットのデータ例
<script>
$(function () {
$('#search_server').click(function () {
....
// ajax post
$.ajax({
url: "/assetinfo/test_ajax",
type: 'POST',
data: {
"tag": "search_project",
"server_name": server_name,
},
dataType: "json",
async: false,
//
success: function (res) {
{#console.log(res.data);#}
// data
for(var i=0;i<res.data.length;i++){
console.log(res.data[i]);
console.log(res.data[i]['server_hostname']);
console.log(res.data[i]['server_internet_ip']);
console.log(res.data[i]['server_intranet_ip']);
}
},
//
error: function () {
alert(" ");
}
})
})
})
</script>
ブラウザは次のように表示されます。ここでは、Django 2.17クエリのデータをjson形式の実現に戻る記事を紹介します。これまでの記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。