2014-09-21 2 views
0

Flask-Restless를 사용하여 쿼리 매개 변수의 필터 개체 목록을 사용하여 서식을 지정해야하는 내 API를 만듭니다. 유효한 쿼리 형식 다음과 같습니다

/api/person?q={"filters":[{"name":"firstName","op":"like","val":"Mike"}]} 

(. 플라스크-불안 쿼리 문서 here 참조)

내가 각도의 $http.get가 검색어 매개 변수를 전달하는 데 사용, 그들은 URL로 인코딩 된 쿼리를 중단하고 있습니다 :

GET /api/person?q=%7B%22filters%22:%7B%22name%22:%22firstName%22,%22op%22:%22like%22,%22val%22:%22Mike%22%7D%7D HTTP/1.1" 

전체 또는 일부 매개 변수에 대한 인코딩을 비활성화 할 수 있습니까?

답변

2

업데이트] 답변 : 객체의 경우 기본적으로

각도 의지는 PARAMS 값을 캐릭터 라인 화.
따라서, 단지 queryObject를 전달하여, 당신을 위해 필요한 모든 일을 할 것입니다 :

var queryObject = {filters: [...]}; 
$http.get('...', {params: {q: queryObject}}); 

은 무엇 당신이 보는 것은 URI 구성 요소로 인코딩 된 캐릭터 라인 객체입니다.

아마 Angular가 아니라 브라우저 자체로 수행됩니다.
(예 :이 같은 URL에 간단한 XHR을 시도하고 DevTools로의 네트워크 패널에서 요청을 곤충.)

내가 플라스크에 익숙하지 않은,하지만 (자동 쿼리 PARAM를 디코딩하지 않는 경우) 수동으로 그렇게하는 방법이 있어야합니다. 도 stringifying 후

+0

, 서버는 GET/API/인 같은 요청을 나타낸다 Q = % 7B %의 22filters 22 % : % 7B % 22name %의 22 % 22firstName %의 22 % 22op % 22 % 22like % 22, % 22val % 22 : % 22Mike % 22 % 7D % 7D HTTP/1.1 " – Josh

+0

@Josh : 사실, 틀렸어, 당신은 문자열을 지정할 필요가 없다. URI 구성 요소로서 쿼리 매개 변수를 인코딩하는 브라우저이다. 모든 요청이있을 때마다 Flusk가 처리 할 수 ​​있어야합니다. – gkalpak

+0

감사합니다. @ExpertSystem, 맞습니다. LIKE 연산자를 사용할 때 %%에서 검색 문자열을 감싸는 바보 같은 실수를 한 것처럼 보입니다. – Josh