2010-06-08 3 views
1

django에서 아약스보기를 구조화하는 올바른 방법을 알고 싶습니다. django : 아약스보기 구조

내가 좋아하는 뭔가 할 말 :

def foo_json(request): 
    if is_ajax(): 
     # return JSON here 

와 '/ foo는/데이터 /'과 같은에서 자원으로 사용할 수 있도록를 .. 모두 괜찮

..

하지만, 브라우저에서 '/ foo/data /'를 가리키면 분명히 다음과 같은 오류 (디버그)가 발생합니다. app.views.foo_json didn't return an HttpResponse object.

이렇게 ... 내 질문 :

이런 종류의보기를 구성하는 가장 좋은 방법은 무엇입니까?

.. HTTP 응답 코드를 반환해야합니까? 아마도 404/405 ... 또는 다른 것일 수 있습니까? -이 처리하는 가장 좋은 방법이 확실하지, 어떤 조언에 감사드립니다 :)

편집 : 그렇게하지 않으면

def foo_proxy(request): 
    if is_ajax(): 
     # proxy external URL 
     # return resource 
    else: 
     # ? do what with browser request 

답변

2

is_ajax를 확인하는 데는 유효한 이유가 있습니다. 이는 교차 도메인 정책을 활용하는 좋은 방법입니다.

그런 경우 403 - Forbidden을 반환합니다. 403은 승인과 아무 관련이 없습니다. 귀하가 요청을 받고 이해했으며 귀하의 의도와 정확히 일치하는 것을 반품하는 것을 거부한다는 것을 인정합니다.

당신은 정기적 HttpResponse 객체의 상태를 설정하는 상태 매개 변수를 사용하거나 HttpResponseForbidden 서브 클래스 사용할 수 있습니다 : 당신은 선택적으로 요청이 거부하는 이유 포함 할 수 개인적으로

return HttpResponseForbidden("Request must be a valid XMLHttpRequest") 

를, 내가하는 경향이 템플릿을 일반 GET으로 보내거나 JSON을 Ajax 요청으로 제공하기 위해 동일한 뷰를 다시 사용하십시오. 그게 가장 좋은 방법이라고 생각하는지 모르겠다. 단지 내 프로젝트에 필요한 것처럼 보인다.

0

:이 질문에 트리거 용맹 한 사용 사례가 아약스 PROXY보기이었다 else 절에서 원하는 것을 알면, if가 필요한 것은 확실합니까? 왜 is_ajax를 테스트할까요? 왜 JSON 데이터를 브라우저로 돌려 보내지 않는 것일까 요?

+0

좋은 점 :) ..하지만 일반적인 질문 - 때로는 javacsript가 비활성화되었을 때 프론트 엔드에서 물건을 깨끗하게 유지하는 것이 바람직 할 때도 있습니다 ... - 요청이 아약스가 아닌 경우 언제나 반환하고 싶지 않습니다. ...하지만 어쩌면 내 생각이 섞여있다. – zack