2009-11-05 3 views
4

최근에 동적으로 생성 된 XML 트리를 장고보기를 통해 반환하고 싶습니다. XML 조작에 사용하는 모듈은 일반적인 cElementTree입니다.Django : HttpResponse를 통해 동적으로 생성 된 XML 출력을

나는 내가 수행하여 원하는 것을 달려 드는 생각 다음

def view1(request): 
    resp = HttpResponse(g()) 
    return resp 

def g(): 
    root = Element("ist") 
    list_stamp = SubElement(root, "list_timestamp") 
    list_creation = str(datetime.now()) 

    for i in range(1,1000000): 
     root.text = str(i) 
     yield cET.tostring(root) 

이런 식으로 뭔가 좋은 생각인가? 내가 놓친 게 있니?

답변

11

스트리밍 :

CommonMiddleware 당신이 설정에서 USE_ETAGS = True을 설정 경우 전체 반복자를 소비하려고합니다. 하지만 현대 Django (1.1)에는 CommonMiddleware + ConditionalGetMiddleware - condition decorator보다 조건 적으로 더 좋은 방법이 있습니다. 스트리밍과 스트리밍은 괜찮습니다 .-

반복기를 사용하려고하는 또 다른 사항은 GzipMiddleware입니다. 이 기능을 사용하려면 스트리밍 응답을 데코레이터로 바꾸고 전 세계가 아닌 개별보기에 적용하여 스트리밍 응답을 피할 수 있습니다.

2

작동합니까? 작동하지 않으면 어떤 오류가 발생합니까?

장고 사이트 용 API를 구축하려면 django-piston을 살펴보십시오. 그것은 그것에 관련된 많은 혼잡을 처리합니다.

http://bitbucket.org/jespern/django-piston/wiki/Home

+0

아무런 오류도 발생시키지 않습니다. 그리고 나는 그것이 잘 작동한다고 생각합니다. 나는 단지 2 의견을 원했다. Unfortuantely, 그것은 편안한 API가 아니에요. 한 번에 수천 개의 객체를 직렬화하는 뷰. –

2

예, 그것은 HttpResponse에의 반복자를 반환하는 완벽하게 합법적이다. 발견 했으므로 클라이언트에 컨텐츠를 스트리밍 할 수 있습니다.

+0

장고 - 피스톤 웹 사이트에서 언급 한 내용에 대해 걱정했습니다. * Django는 ConditionalGetMiddleware 및 CommonMiddleware로 스트리밍 브레이크를 지원합니다. 나는 보이지 않는 반향이 우려됩니다. –

2

예. 그것은 장고에서하는 당신의 방법입니다. "속보"미들웨어 소개

관련 문제