Skip to main content
 首页 » 编程设计

python之Django session 设置默认 key 用法

2025年02月15日35mfryf

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

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

我使用 session 来存储用户给定的日期并在不同的 View 中使用该日期。下面的代码几乎完全符合我的要求,至少没有默认设置。当我为“set_date”设置默认值时,我似乎无法在不同的 View 中使用日期,一旦我切换 View ,默认值就会再次设置。

将默认值设置为“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 

提前致谢!

请您参考如下方法:

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

使用setdefault键不存在时设置默认值。

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