我正在修改一个类似于以下内容的Django视图:
class ListBase(DashboardAccessMixin, OrderingMixin, FilterMixin, SearchMixin):
def get(self, request, *args, **kwargs):
if should_delete_filter_cookie(request, path=reverse('dashboard:families')):
request.COOKIES.pop('filters', None)
self.query_dict = query_dict_from_params_or_cookies(request)
return super().get(request, *args, **kwargs)
def render_to_response(self, context, **response_kwargs):
response = super().render_to_response(context, **response_kwargs)
path = reverse('dashboard:families')
if should_delete_filter_cookie(self.request, path=path):
response.delete_cookie('filters', path=path)
elif list(self.request.GET.items()):
response.set_cookie('filters', self.request.GET.urlencode(), path=path)
return response
其中辅助函数should_delete_filter_cookie
和query_dict_from_params_or_cookies
定义为
视图有一个filter_form
和一个search_form
(通过相应的mixin),它们与self.query_dict
绑定。此外,我们遵循命名约定,UpdateView
和{ListView
的URL的“扩展”:例如,前者是/dashboard/families
,后者只是dashboard/families/1
(但不是{
ListView
现在是这样的,当您从UpdateView
返回它时,它将保留以前通过从cookies中获取self.query_dict
而应用的筛选器。在
我想知道的是为什么should_delete_filter_cookie
被调用两次,分别是在get()
方法和{
另外,为什么在render_to_response
方法中使用response.set_cookie
,而不仅仅是get()
方法中使用response.set_cookie
?在
在更基本的层面上,我正在努力理解request.COOKIES
和{
from django.test import SimpleTestCase, RequestFactory
from django.urls import reverse
from http.cookies import SimpleCookie
class SearchFilterTest(SimpleTestCase):
def setUp(self):
# Use a RequestFactory instead of a Client to obtain Request objects instead of Response objects
self.factory = RequestFactory()
def test_get_with_cookies(self):
self.client.cookies = SimpleCookie({'filters': 'q=Christine'})
response = self.client.get(
reverse('dashboard:families'),
HTTP_REFERER=reverse('dashboard:family', kwargs={'pk': 1, 'tab': 'case-management'}))
import ipdb; ipdb.set_trace()
如果我进入调试器,我会发现response.cookies
是空的SimpleCookie
,即使已经为测试客户机设置了cookie:
ipdb> response.cookies
<SimpleCookie: >
response.cookies
是否仅表示用response.set_cookie
设置的cookies,而不是原始请求附带的cookie?在
另外,在这个用例中,在get()
或render_to_response()
方法中设置cookie的最佳方法是什么?在
目前没有回答
相关问题 更多 >
编程相关推荐