python - Django session 设置默认 key 用法

标签 python django django-views django-queryset django-sessions

所以我有一个关于 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')

关于python - Django session 设置默认 key 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44953521/

相关文章:

python - 为什么这个 python 代码不打印字谜?

python - 读取 .JPG 图像并在不更改文件大小的情况下保存它

python - 遍历目录时移动重命名文件的更简洁方法

python - Django 和 DB 错误 "Column ' id'指定了两次”

python - 如何在Django中获取指定时间模型实例的值?

python - 如何覆盖 django rest 框架 ModelViewSet 中的更新操作?

django - 为 django CreateView 将登录用户设置为 created_by

django - 在 Django 中返回 HttpResponse() 时,开发 wsgi 服务器陷入困境(debug=True)

python - 我如何告诉 Python sys.argv 在 Unicode 中?

python - Django 在不知道字段名称的情况下将模型导出到 csv