2 回答

慕姐4208626
TA貢獻1852條經驗 獲得超7個贊
下面通過一個例子說明如何從HTML中發送json,并在Django中接收json數據,在HTML中,可以通過JSON對象將數據以Json格式發送到服務器,假設在play.html中有以下內容要發送到服務器:
用戶名username
密碼password
一個數組,其中每個元素包含: 游戲編號game_id和得分level
那么,,可以使用如下JavaScript(JQuery)代碼:
<script?type="text/javascript">
$(function()?{
$('#upload').click(function()?{
var?json_obj?=?{
username:?$('#username').val(),
password:?$('#password').val(),
datas:?[
????????{
????????game_id:?$('#datas1').val(),
????????level:?$('#level1').val()
????????},
????????{
????????game_id:?$('#datas2').val(),
????????level:?$('#level2').val()
????????}
???]
};????//JSON對象???
var?json_str?=?JSON.stringify(json_obj);????//將JSON對象轉變成JSON格式的字符串
????$.post("/datasave",?json_str,?callback,?"json");
})
function?callback(json){
$('#response').html('code:'+json['status']['code']?+?"\tmessage:"?+?json['status']['message']);
}
})
</script>
在上面的代碼中,數據將發送到/datasave,在Django中使用request.raw_post_data,并借助simplejson來將其轉換為字典dict數據類型,代碼如下:
def?datasave(request):
????dict?=?{}
????info?=?'Data?log?save?success'
????try:
????????if?request.method?==?'POST':
????????//request.raw_post_data從客戶端發送過來的原始數據,通過simplejson的loads方法將其轉換為字典數據類型req
????????????req?=?simplejson.loads(request.raw_post_data)
????????????username?=?req['username']
????????????password?=?req['password']
????????????datas?=?req['datas']
????????????game_id1?=?datas[0]['game_id']
???except:
????????import?sys
????????info?=?"%s?||?%s"?%?(sys.exc_info()[0],?sys.exc_info()[1])
????dict['message']=info
????dict['create_at']=str(ctime())
????json=simplejson.dumps(dict)
????return?HttpResponse(json)

慕沐林林
TA貢獻2016條經驗 獲得超9個贊
def?datasave(request):
????dict?=?{}
????info?=?'Data?log?save?success'
????try:
????????if?request.method?==?'POST':
????????????req?=?simplejson.loads(request.raw_post_data)
????????????username?=?req['username']
????????????password?=?req['password']
????????????datas?=?req['datas']
????????????game_id1?=?datas[0]['game_id']
???except:
????????import?sys
????????info?=?"%s?||?%s"?%?(sys.exc_info()[0],?sys.exc_info()[1])
????dict['message']=info
????dict['create_at']=str(ctime())
????json=simplejson.dumps(dict)
????return?HttpResponse(json)
request.raw_post_data表示的是從客戶端發送過來的原始數據,為了純字符串, 通過simplejson的loads方法將其轉換為字典數據類型req.
上面的代碼也演示了如何以JSON格式作為響應值, 而非HTML, 即通過simplejson的dumps方法,
將字典數據dict序列化為字符串形式,將通過HttpResponse返回.
- 2 回答
- 0 關注
- 826 瀏覽
添加回答
舉報
0/150
提交
取消