>  기사  >  백엔드 개발  >  Django는 Angular의 POST 데이터를 구문 분석합니다.

Django는 Angular의 POST 데이터를 구문 분석합니다.

高洛峰
高洛峰원래의
2017-02-18 10:36:091359검색

Django와 Angular를 사용하는 과정에서 Angular POST 데이터를 Django로 보내는 문제가 발생했습니다.

// Angular
$http({
    url: "myviews",
    method: "POST",
    data: {'text': 'hello world', 'date': '2017-01-04'}
})
# Django
def myviews(request):
    print request.POST
    print request.body

위의 내용은

<QueryDict: {}>
u"{'text': 'hello world', 'date': '2017-01-04'}"

를 인쇄하고 이 결과를 기대합니다.

<QueryDict: {u&#39;text&#39;: u&#39;hello world&#39;, u&#39;date&#39;: u&#39;2017-01-04&#39;}>
u"{'text': 'hello world', 'date': '2017-01-04'}"

이 문제는 Angular에서 보낸 기본 데이터 형식이 JSON이고 , Django의 urlencoderequest.POST을 파싱할 수 없으므로 위와 같은 결과가 나타납니다. JSON

에 대한 많은 솔루션이 있습니다. 가장 간단하고 조잡한 방법은 각 뷰 함수에서

def myviews(request):
    data = urlencode(json.loads(request.body))
    q_data = QueryDict(data)
request.body를 구문 분석하는 것입니다. 이러한 유형의 작업을 추출하여 로 작성할 수 있습니다.

요청이 보기 기능에 도달하기 전에 균일하게 Middlerware

class JSONMiddleware(object):
    """
    Process application/json requests data from GET and POST requests.
    """
    def process_request(self, request):
        if 'application/json' in request.META['CONTENT_TYPE']:
            data = json.loads(request.body)
            q_data = QueryDict('', mutable=True)

            for key, value in data.iteritems():
                if isinstance(value, list):
                    for x in value:
                        q_data.update({key: x})
                else:
                    q_data.update({key: value})

            if request.method == 'GET':
                request.GET = q_data

            if request.method == 'POST':
                request.POST = q_data
        return None
request 처리됩니다. 일부 요청에는

request가 없기 때문에 왜 간단하지 않은지 판단해야 합니다. 일관성 원칙에 따라 결과를 CONTENT-TYPE 또는 Header에 바인딩하려고 하는데 둘 다 Dict 유형이므로 QueryDict 대신 request.GET으로 변환됩니다. request.POSTQueryDict의 가장 큰 차이점은 QueryDict는 각 Dict을 리스트로 저장하고, QueryDict은 수정이 불가능한 타입이라는 점입니다. 그래서 value이 리스트인 경우에도 판단을 내려야 합니다. 그렇지 않으면 전체 리스트가 QueryDict 리스트의 한 요소로 저장됩니다. value아아아아아아아QueryDict                                      

Angular의 게시물 데이터 관련 기사에 대한 더 많은 Django 분석을 보려면 PHP 중국어 웹사이트를 팔로우하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.