2017-02-17 6 views
0

私はcherrypyアプリを持っています。私はレスポンスヘッダーContent-typeを変更しようとしています。私はcherrypy.response.header ['Content-Type'] = 'text/plain'でそれをしようとしています。残念ながら私はまだ 'text/html'を取得しています。私はOK要求のための1つのコンテンツタイプとエラーメッセージのための別のコンテンツタイプを設定したいと思う。コンテンツの種類を変更するには、デコレータを使用する方法があります。しかし、このメソッドのセット型と私はそれを変更する必要があります。どこに問題があるかも知っていますか? 私の設定:Cherrypyとcontent-type

config = { 
    '/': { 
     'request.dispatch': cherrypy.dispatch.MethodDispatcher(), 
     'tools.response_headers.on': True, 
     'tools.response_headers.headers': [('Content-Type', 'text/html')], 
    } 
} 



def GET(self, id): 
    cherrypy.response.headers['Content-Type'] = 'application/x-download' 
    somecode 
    if res < None: 
     cherrypy.response.headers['Content-Type'] = 'text/plain'   
     cherrypy.response.status=404 

GET._cp_config = {'response.stream': True} 
+0

'404 Not Found'のカスタムレスポンスを送ろうとしていますか?これをチェックしてください:https://github.com/cherrypy/cherrypy/blob/master/cherrypy/_cperror.py#L49-L111 カスタムレスポンスを構築するためにカスタム呼び出し可能を設定することは可能です。 – webKnjaZ

+0

残念ながら働いていません。私はcherrypy.expose()で試してみたところ、動作は少し変わりました。誰でも私のことを説明できますか? – George

+0

正確には何ですか?より詳細に達成しようとしていることを説明し、より完全なコードスニペットを提供してください。 – webKnjaZ

答えて

0
def stream(): 
def decorate(func): 
    def wrapper(*args, **kwargs): 
     name = time.strftime("%Y%m%d-%H%M%S") 
     cherrypy.response.headers['Content-Type'] = 'application/x-download' 
     cherrypy.response.headers['Content-Disposition'] = 'attachment; filename="' + name + '.txt"' 
     cherrypy.response.headers['Transfer-Encoding'] = 'chunked' 
     return func(*args, **kwargs) 
    return wrapper 
return decorate 



    @cherrypy.expose 
    class Network: 
@stream() 
def GET(self, id): 
    source = my_generator() 
    for i in source: 
     if res < None: 
      cherrypy.response.headers['Content-Type'] = 'text/plain'   
      cherrypy.response.status=404 
      break 
     yield bytes(i) 

GET._cp_config = {'response.stream': True} 

[OK]を、より複雑なコードがある、CherryPyにの設定は、以前のコメントです。私はいくつかのデータを生成するジェネレータを持っており、これはそのデータをファイルにクライアントにストリーミングしています。私は確かに、より良い解決策があります。 res変数にdbに保存した結果があるとします。問題は、これがif条件での私の設定を完全に無視するということです。まだファイルを返しています(空のファイル)。デコレータはコンテンツタイプを設定する唯一の方法です、その理由はあります。

関連する問題