Python Django会话设置默认密钥用法

Python Django会话设置默认密钥用法,python,django,django-views,django-queryset,django-sessions,Python,Django,Django Views,Django Queryset,Django Sessions,所以我有一个关于会话密钥的问题,通常当用户第一次访问站点时,会话密钥还不存在,因此您必须设置默认值 set_date = request.session.get('set_date', '2017-07-06') 我使用会话存储用户给定的日期,并在不同视图中使用此日期。下面的代码几乎完全符合我的要求,至少没有默认设置。当我为“set_date”设置默认值时,我似乎无法在不同的视图中使用该日期,一旦切换视图,将再次设置默认值 将默认值设置为“set_date”的正确方法是什么 views.py

所以我有一个关于会话密钥的问题,通常当用户第一次访问站点时,会话密钥还不存在,因此您必须设置默认值

set_date = request.session.get('set_date', '2017-07-06')
我使用会话存储用户给定的日期,并在不同视图中使用此日期。下面的代码几乎完全符合我的要求,至少没有默认设置。当我为“set_date”设置默认值时,我似乎无法在不同的视图中使用该日期,一旦切换视图,将再次设置默认值

将默认值设置为“set_date”的正确方法是什么

views.py

"""
Check-ins listview
"""

from .forms import DateSelection    

class CheckInsListView(generic.ListView, FormMixin): 
    form_class = DateSelection
    model = Delivery
    paginate_by = 10
    queryset = Delivery.objects.filter(status='AR')
    template_name = 'check-ins.html' 

    """
    Save the user given date in a session key set_date
    """

    def get_context_data(self, *args, **kwargs):
        context = super(CheckInsListView, self).get_context_data(*args, **kwargs)
        user_date = self.request.GET.get("date_selection")

        if user_date: # If user enters date
            self.request.session['set_date'] = user_date # Save given date in session
            context ['set_date'] = self.request.session['set_date'] # Sent date to context

        else: 
            context ['set_date'] = self.request.session['set_date'] # Use date from session

        return context

    """
    Use the date from session to filter the query results
    """

    def get_queryset(self):
        queryset = super(CheckInsListView, self).get_queryset()

        user_date = self.request.GET.get('date_selection')
        session_date = self.request.session['set_date'] 

        if user_date:
            return queryset.filter(arrival_date__icontains=user_date) # Filter on user given date

        else:
            return queryset.filter(arrival_date__icontains=session_date) # Filter on date from session

        return queryset # Return queryset without filter

提前谢谢

在您提到的问题中,如果键不存在,则返回默认值,但不设置默认值

用于在密钥不存在时设置默认值

set_date = request.session.setdefault('set_date', '2017-07-06')

@阿拉斯代尔肯定给出了一个正确的python式的答案,但您也可以使用Django的
session.get
方法()


同样重要的是要知道,如果密钥不存在,
request.session.get
将不会抛出错误

我还不能接受您的答案,但它是有效的!一直盯着它看了一会儿,谢谢你的快速回复!
request.session.get('key_you_want', default='your_default_value')