Python-Django에서 JSON 형식의 데이터를 받는 방법

2804 단어
Django는 대량의 작업을 하여 우리의 웹 개발 업무를 간소화시켰다. 그 중에서 클라이언트로부터 데이터를 받는 보편적인 수요도 포함한다.대부분의 경우 클라이언트로부터 전송된 데이터는 주로 FORM의POST 데이터와 URL의GET 데이터이다. Django에서 HttpRequest 대상의POST와 GET 속성에 대응한다. 예를 들어 FORM 폼의 사용자 이름username 입력 상자를 읽는 내용:
def someView(request):
    username = request.POST.get('username');
    ......

WEB2.0시대에 만약에 우리가 클라이언트로부터 JSON 형식의 데이터를 전송한다면 위의 방법은 데이터를 정상적으로 읽을 수 없을 것이다.왜 꼭 JSON 형식의 데이터로 FORM 형식의 데이터로 인코딩하지 않느냐는 질문이 있을 수 있다.JSON 형식은 데이터의 차원 구조를 더욱 잘 나타낼 수 있기 때문에 FORM 형식의 데이터는 왕왕 단층일 뿐이다.
다음은 HTML에서 json을 보내고 Django에서 json 데이터를 받는 방법을 보여 줍니다.
HTML에서 JSON 대상을 통해 데이터를 Json 형식으로 서버에 전송할 수 있으며 플레이를 가정할 수 있습니다.html에서 서버에 전송할 내용은 다음과 같습니다.
  • 사용자 이름username
  • 비밀번호 password
  • 하나의 그룹, 각 요소는 게임 번호 게임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를 사용합니다.POST에서 데이터를 읽습니다. 얻은 것은 모두 None입니다. 이럴 때는 Request를 사용해야 합니다.raw_post_데이터, 그리고 단순json을 빌려 사전 dict 데이터 형식으로 변환한 다음에 사용은 다음과 같다.
    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_데이터는 클라이언트에서 보내온 원시 데이터를 표시하고 순수한 문자열을 위해 simplejsonloads 방법을 통해 사전 데이터 형식req로 변환합니다.위의 코드는 HTML이 아닌 JSON 형식으로 응답하는 방법을 보여 주었다. 즉 simplejson 방법으로 사전 데이터 dict를 문자열 형식으로 서열화하고 Http Response를 통해 되돌아오는 것이다.

    좋은 웹페이지 즐겨찾기