2013-03-25 39 views

回答

7

您可以编写自定义的中间件:

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的值实现你的目标,因为你有很多意见,当然你不能更新每个视图。自定义的中间件将是这样的:

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后你属于。

1

我的理解是,你想设置一次cookie,然后在任何视图中检查它的值。如果这是你的问题,那么您可以在视图一次保存的Cookie是这样的:

request.COOKIES.get('key', None) # Return None If cookie not exists