设置基于视图Django的自定义头类

设置基于视图Django的自定义头类,django,http,django-views,django-class-based-views,Django,Http,Django Views,Django Class Based Views,我正在Django学习基于类的视图,并已学会使用基本的通用视图,如View和TemplateView 我在玩ListView和DetailView这样的通用视图,然后我遇到了一个问题。 如何在基于类的视图中添加自定义头,该视图继承自ListView和DetailView等视图类之一 class GetParticularUserView(ListView): http_method_names=['get'] template_name='one_user.html'

我正在Django学习基于类的视图,并已学会使用基本的通用视图,如View和TemplateView

我在玩ListView和DetailView这样的通用视图,然后我遇到了一个问题。 如何在基于类的视图中添加自定义头,该视图继承自ListView和DetailView等视图类之一

 class GetParticularUserView(ListView):
     http_method_names=['get']
    template_name='one_user.html'
    # context_object_name='user'        # set context either by this or by get_context_data
    '''queryset=User.objects.all()'''   # one way to set the data in the context

    def get_queryset(self):
        # define the query set to be used here.
        self.user=get_object_or_404(User,id=self.kwargs['id']) 
        return self.user

    def get_context_data(self,**kwargs):
         context=super(GetParticularUserView,self).get_context_data(**kwargs)
        context['user']=self.user
        return context
我在上搜索了它,但找到了所有基于函数的视图的答案

我已经能够在继承自视图类的类基本视图中设置标题

class MyView(View):
    http_method_names=['post','get']
    message='<div id="myview">This is a class based view response.</div>'
    content_type='text/html'
    charset='utf-8'
    template_name='base.html'

    @method_decorator(gzip_page)
    @method_decorator(condition(etag_func=None,last_modified_func=None))
    def get(self,request,*args,**kwargs):
        response=TemplateResponse(request,self.template_name,{'number':1,'number_2':2})
        response.__setitem__('x-uuid',uuid.uuid4().hex)     #set header explicitly
        response.__setitem__('status',200)
        response.__setitem__('page_id',str(uuid.uuid4().hex))
        patch_vary_headers(response,['Etag','Cookie','User-Agent'])
        patch_cache_control(response)
        return response

    #Override this method to tell what to do when one of the methods in http_method_names is called
    def http_method_not_allowed(request, *args, **kwargs):
        response=HttpResponse("Method not allowed",status=405)
        response.__setitem__('x-uid',uuid.uuid4().hex)      #set header explicitly
        response.__setitem__('status',405)
        response.__setitem__({'hello':'word'})
        return response
        #return any type of response here
    # return JsonResponse(status=405,data={'not_allowed':True})

我将覆盖
分派
方法。调用
super()
获取响应,设置标题,然后返回响应。注意:您不需要调用
\uuuuu setitem\uuuuu
——只需将响应视为字典

class GetParticularUserView(ListView):

    @method_decorator(gzip_page)
    @method_decorator(condition(etag_func=None,last_modified_func=None))
    def dispatch(self, *args, **kwargs):
        response = super(GetParticularUserView, self).dispatch(*args, **kwargs)
        response['x-uid'] = uuid.uuid4().hex  # set header
        return response