【问题标题】:how to set cookie in class based generic view如何在基于类的通用视图中设置 cookie
【发布时间】:2014-05-21 04:56:22
【问题描述】:

django1.6 的新手

我想在基于类的通用视图 (Listview) 中设置 cookie

models.py

class Designation(Models.model):
    title = models.CharField(max_length=50)
    description = models.CharField(max_length=10000, blank=True)

views.py

class DesignationList(ListVew):

    def get_queryset(self):
        """ 
        will get 'sort_by' parameter from request,
        based on that objects list is return to template
        """

        col_nm = self.request.GET.get('sort_by', None)


        if col_nm:
            if cookie['sort_on'] == col_nm:
                objects=Designation.objects.all().order_by(col_nm).reverse()
            else:
                cookie['sort_on'] = col_nm
                objects=Designation.objects.all().order_by(col_nm)  
        else:
            objects = Designation.objects.all().order_by('title')
            //set cookie['sort_on']='title'


    return objects

模板 在模板中迭代对象

所以最初对象显示在 sort_by 'title' desc 中。 “这个值是我想在 cookie 中设置的”。

在模板中,如果用户点击标题,它将签入cookie cookie['sort_on']='title' 然后所有对象都按顺序排列

如果用户点击描述,则 cookie 值被替换 cookie['sort_on']='description' 和对象按 desc 顺序排列..

soo,如何设置我可以在整个 ListView 类中使用的 cookie..?

提前谢谢..

【问题讨论】:

标签: python django cookies django-views


【解决方案1】:

为了设置/删除 cookie,您必须有权访问“响应”对象。为此,在基于类的视图中,您可以覆盖“render_to_response”。

例子:

class DesignationList(ListVew):
    def render_to_response(self, context, **response_kwargs):
        response = super(LoginView, self).render_to_response(context, **response_kwargs)
        response.set_cookie('sort_on', 'title')
        return response

【讨论】:

    【解决方案2】:

    除非您有充分的理由,否则您不应使用 cookie,而应使用 session framework。您可以使用 self.request.session 在您的方法中访问它,它就像一个字典。

        if col_nm:
            if self.request.session.get('sort_on') == col_nm:
                objects=Designation.objects.all().order_by(col_nm).reverse()
            else:
                self.request.session['sort_on'] = col_nm
                objects=Designation.objects.all().order_by(col_nm)  
    

    等等

    【讨论】:

    • 我认为问题是“如何设置 cookie”而不是“如何访问”。通过 request.session 你不能设置。
    • @sajid 您可以在request.session 中设置密钥。它是一个类似字典的对象。 Documentation
    • 它没有回答问题
    猜你喜欢
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2012-04-27
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    相关资源
    最近更新 更多