Python--- 如何在Django中接收JSON格式的數據

        Django 作了大量工做簡化咱們的Web開發工做, 這其中固然也包括接收來自客戶端的數據這一廣泛需求. 大部分時候,從客戶端傳入的數據主要是FORM的POST數據,和來自URL的GET數據, 在Django中對應了HttpRequest對象的POST和GET屬性, 例如讀取FORM表單中的用戶名username輸入框的內容:javascript

def someView(request):
    username = request.POST.get('username');
    ......

在WEB2.0時代, 若是咱們從客戶端傳入的是JSON格式的數據, 上面的方法就沒法正常讀出數據了. 可能有人要問,爲何必定要用JSON格式的數據, 不直接編碼成FORM形式的數據呢? 由於JSON格式可以更好地體現數據的層次結構, 而FORM形式的數據每每只能是單層.html

下面經過一個例子演示如何從HTML中發送json,並在Django中接收json數據.java

在HTML中,能夠經過JSON對象將數據以Json格式發送到服務器,假設在play.html中有如下內容要發送到服務器:json

  • 用戶名username數組

  • 密碼password服務器

  • 一個數組,其中每一個元素包含: 遊戲編號game_id和得分levelpost

那麼, 可使用以下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.POST來讀數據, 獲得的全是None, 這時得使用request.raw_post_data, 並藉助simplejson來將其轉換爲字典dict數據類型, 而後的使用就簡單了,以下:spa

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表示的是從客戶端發送過來的原始數據,爲了純字符串, 經過simplejsonloads方法將其轉換爲字典數據類型req.
上面的代碼也演示瞭如何以JSON格式做爲響應值, 而非HTML, 即經過simplejsondumps方法, 將字典數據dict序列化爲字符串形式,將經過HttpResponse返回.code

相關文章
相關標籤/搜索