1

私は多くのビューを持つサイトを持っています、そして私はそれらのそれぞれのクッキーをチェックしたいです、そしてそれがそうでないとき-それらを保存してください。しかし、サイトには多くのビューがあります。

すべてのビューに対して1回だけ実行するにはどうすればよいですか?

4

2 に答える 2

7

多くのビューがあり、もちろんすべてのビューを更新できるわけではないため、目標を達成するためにカスタムミドルウェアを作成できます。カスタムミドルウェアは次のようになります。

class MyCookieProcessingMiddleware(object):

    # your desired cookie will be available in every django view
    def process_request(self, request):
        # will only add cookie if request does not have it already
        if not request.COOKIES.get('your_desired_cookie'):
            request.COOKIES['set_your_desired_cookie'] = 'value_for_desired_cookie'

    # your desired cookie will be available in every HttpResponse parser like browser but not in django view
    def process_response(self, request, response):
        if not request.COOKIES.get('your_desired_cookie'):
            response.set_cookie('set_your_desired_cookie', 'value_for_desired_cookie')
        return response

settings.pyファイルに、次のようにカスタムミドルウェアへのパスを追加するだけです。

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'MyProject.myapp.mymodule.MyCookieProcessingMiddleware',  # path to custom class
)

ミドルウェアの順序は重要であり、あなたはSessionMiddlewareの後に属します。

于 2013-03-25T12:34:34.277 に答える
1

私が理解したのは、Cookieを一度設定してから、任意のビューでその値を確認したいということです。これが問題である場合は、次のようなビューでCookieを1回保存できます。

from project.settings import IS_COOKIE_SET # Set Global value for cookie
response = render_to_response("your-template.html")
if !IS_COOKIE_SET:  
    response.set_cookie('key', 'value')
    return response
else:
    return response

cookieの値は、次のような他のビューで確認できます。

request.COOKIES.get('key', None) # Return None If cookie not exists
于 2013-03-25T10:31:05.913 に答える