배경
테스트 툴박스 작성 중간에 오늘 프론트엔드와 백엔드 데이터 상호작용에 문제가 발생했으니 함께 정리해보겠습니다.
환경
------------------------- --- -----
버전 관련
운영 체제: Mac OS X EI Caption
Python 버전: 2.7
IDE: PyCharm
Django: 1.8.2
---------------------- ---------------------
참고: 저는 Get 메소드인 POST를 테스트했습니다.
문자 유형
문자 유형 데이터를 비교적 쉽게 얻을 수 있는 방법은 다음과 같습니다.
sendData = { "exporttype": exporttype, "bugids": bugids, "test": JSON.stringify({"test": "test"}) };
Django의 백엔드에서는 이 데이터를 정상적으로 가져오려면exporttype = request.GET.get("exporttype")
을 사용하세요.
참고: Python2.7에서는 데이터가 유니코드로 인코딩되어 있습니다. 사용하려면 때로는 str을 변환해야 합니다.
결과 예:
Excle 2ba6561e11582ff8b3b8cb8d034e5f5a
배열 유형
배열 유형 데이터를 가져옵니다. 문자열 데이터를 가져오는 방법을 사용하면 결과는 None이 됩니다. 다음 방법을 사용해야 합니다.
bugids = request.GET.getlist("bugids[]")
이 방법으로 얻은 데이터는 배열 유형입니다.
참고: 가져온 배열의 요소는 유니코드로 인코딩되어 있으며 특정 시점에 트랜스코딩해야 합니다.
결과 예:
•전달된 URL
[14/Jul/2016 11:00:41]"GET /testtools/exportbug/?exporttype=Excle&bugids%5B%5D=102&bugids%
• 확보한 데이터
[u'102', u'101', u'100', u'99', u'98', u'97', u'96', u'95', u'94', u'93', u'92', u'91', u
문자형
문자형 데이터는 실제로는 문자열 데이터로 간주할 수 있다. 해당 문자열을 얻은 후 JSON 모듈을 사용하여 형식을 지정하면 됩니다.
프런트 엔드의 경우 문자 데이터를 전달하는 일반적인 방법은 JSON 데이터를 전달하는 것이므로 사용되는 방법은 다음과 같습니다.
"test": JSON.stringify({"test": "test"} )
결과 예:
{"test":"test"} 7e85ee8fa6fb36ffd3a33282af6bf29f
관련 소스 코드
•Get 메소드
Get 메소드는 wsgi의 메소드입니다.
def GET(self): # The WSGI spec says 'QUERY_STRING' may be absent. raw_query_string = get_bytes_from_wsgi(self.environ, 'QUERY_STRING', '') return http.QueryDict(raw_query_string, encoding=self._encoding)
최종 반환은 http.QueryDict(raw_query_string, 인코딩=self._encoding)http의 원본 데이터, QueryDict는 MultiValueDict에서 상속됩니다. , 따라서 MultiValueDict를 직접 볼 수 있습니다.
•MultiValueDict
사실 소스코드는 어렵지 않아 보입니다.
def get(self, key, default=None): """ Returns the last data value for the passed key. If key doesn't exist or value is an empty list, then default is returned. """ try: val = self[key] except KeyError: return default if val == []: return default return val def getlist(self, key, default=None): """ Returns the list of values for the passed key. If key doesn't exist, then a default value is returned. """ try: return super(MultiValueDict, self).__getitem__(key) except KeyError: if default is None: return [] return default def __getitem__(self, key): """ Returns the last data value for this key, or [] if it's an empty list; raises KeyError if not found. """ try: list_ = super(MultiValueDict, self).__getitem__(key) except KeyError: raise MultiValueDictKeyError(repr(key)) try: return list_[-1] except IndexError: return []
getlist 메소드는 모든 데이터를 통합하여 반환하는 메소드입니다.
위의 Django가 프런트엔드 데이터를 받아들이는 여러 방법에 대한 요약은 모두 편집자가 공유한 내용입니다. 더 많은 관련 기사를 보려면 PHP 중국어를 참고하시기 바랍니다. 홈페이지(www.php.cn)!
.