python - Django 2.2 | 匿名用户打开站点时不会创建名称为“sessionid”的 Cookie
问题描述
我将 PostgreSQL 与 Django 2.2 一起使用。
我正在尝试在会话上设置购物车 ID,但每次会话在用户登录或不登录时都没有任何价值。即使我尝试以隐身模式打开网站 sessionid cookie 也不是由匿名用户创建的。因此,每次它创建一个用户是否登录的新购物车时。
视图.py
def index(request):
context = {}
res = getCart(request)
context.update(res)
return render(request, 'index.html', context)
def getCart(request):
lines = []
order = {}
cartQuantity = 0
if request.session.get('cart'):
cart = Cart.objects.get(pk=request.session.get('cart'),state='draft')
lines = cart.cartlines_set.all()
cartQuantity = int(cart.getQuantity)
if not order:
cart = Cart.objects.create(customer_id=request.user, state='draft')
request.session['cart'] = cart.id
lines = cart.cartlines_set.all()
cartQuantity = int(cart.getQuantity)
return {'lines': lines, 'cart':cart, 'cartQuantity': cartQuantity}
** url.py **
urlpatterns = [
path('', shop, name="shop"),
]
设置.py
SESSION_SAVE_EVERY_REQUEST = True
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Custom moduels
'cart.apps.cartConfig',
]
解决方案
It happens because the passing args into the function works in such a way. You're modifying a copy of the request, but the view returns not modified one.
Closest to your case example:
request = "I'm a true request"
def change_request(request):
request = "I want to change request"
return {'foo': 'bar'}
change_request(request)
{'foo': 'bar'}
print(request)
"I'm a true request"
As you can see it's not modified.
Solution Return the same request instance (that you want to modify) as you have got from args. Example:
def view_name(request):
payload = {
# your data
}
request.session['foo'] = 'bar'
return render(request, 'index.html', payload)
推荐阅读
- selenium - 除了使用隐式等待或 webdriver 等待外,如何将默认等待时间应用于 selenium 中的可见或查找或显示 webElement
- bash - 当我通过 ssh 尝试时,这个 unix 命令有什么问题?
- sequelize.js - sequelize.sync() 以什么顺序创建模型?
- python - 从字符串列表python中查找最长的唯一字符串
- reactjs - 不能从函数返回值反应本机
- javascript - 如何正确使用 Formik 的 setError 方法?(反应库)
- c# - 玩家不会死于它应该死于的特定事物(2d 平台游戏)
- animation - 在 Swift 中启动和停止 UISlider 动画?
- r - R 检查组内的级别,如果不存在则重复行
- javascript - 如何使用 JS 在数组中声明数组索引值?