私は多くのビューを持つサイトを持っています、そして私はそれらのそれぞれのクッキーをチェックしたいです、そしてそれがそうでないとき-それらを保存してください。しかし、サイトには多くのビューがあります。
すべてのビューに対して1回だけ実行するにはどうすればよいですか?
私は多くのビューを持つサイトを持っています、そして私はそれらのそれぞれのクッキーをチェックしたいです、そしてそれがそうでないとき-それらを保存してください。しかし、サイトには多くのビューがあります。
すべてのビューに対して1回だけ実行するにはどうすればよいですか?
多くのビューがあり、もちろんすべてのビューを更新できるわけではないため、目標を達成するためにカスタムミドルウェアを作成できます。カスタムミドルウェアは次のようになります。
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の後に属します。
私が理解したのは、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