6

検閲として機能するように応答オブジェクトをdjango編集するカスタムミドルウェアを作成しています。ある単語のすべてのインスタンスを自分が選択したものに置き換えて、ある種の検索と置換を行う方法を見つけたいと思います。

ミドルウェアオブジェクトを作成し、それをMIDDLEWARE_CLASSES設定に追加して、応答を処理するように設定しました。しかし、これまでのところ、Cookieを追加/編集したり、辞書アイテムを設定/削除したり、htmlの最後に書き込んだりする方法しか見つかりませんでした。

class CensorWare(object):
    def process_response(self, request, response):
        """
        Directly edit response object here, searching for and replacing terms
        in the html.
        """
        return response

前もって感謝します。

4

2 に答える 2

8

response.content文字列を変更するだけです。

response.content = response.content.replace("BAD", "GOOD")
于 2012-06-10T02:38:32.927 に答える
0

おそらく私の返事は少し良くなりました。response.content.replace( "BAD"、 "GOOD")を作成しようとすると、response.contentがバイト配列であるため、文字列では実行できないというエラーが発生します。ベーステンプレートに構文文字列「gen_duration_time_777」と「server_time_777」を追加しました。そして、これは私のために働きます。

import time
from datetime import datetime

class StatsMiddleware(object):
    duration = 0

    def process_request(self, request):
        # Store the start time when the request comes in.
        request.start_time = time.time()

    def process_response(self, request, response):
        # Calculate and output the page generation duration
        # Get the start time from the request and calculate how long
        # the response took.
        self.duration = time.time() - request.start_time

        response["x-server-time"] = datetime.now().strftime("%d/%m/%Y %H:%M")
        response.content = response.content.replace(b"server_time_777", str.encode(response["x-server-time"]))
        response["x-page-generation-duration-ms"] = '{:.3f}'.format(self.duration)
        response.content = response.content.replace(b"gen_duration_time_777", str.encode(response["x-page-generation-duration-ms"]))
        return response
于 2016-02-06T05:16:22.100 に答える