姜戈 2.2 |名称为 "sessionid" 的 Cookie 不会在匿名用户打开站点时创建
Django 2.2 | Cookie with name "sessionid" is not create while anonymous user open site
我在 Django 2.2 中使用 PostgreSQL。
我正在尝试在会话中设置购物车 ID,但无论用户是否登录,每次会话都会获得 none 值。即使我尝试以隐身模式打开网站,sessionid cookie 也不会由匿名用户创建。因此,每次它都会在用户登录或未登录的情况下创建一个新购物车。
views.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"),
]
settings.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',
]
发生这种情况是因为将参数传递给函数以这种方式工作。
您正在修改请求的副本,但视图 returns 未修改。
最接近您的案例示例:
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"
如您所见,它没有被修改。
解决方案
Return 与您从 args 获得的请求实例(您要修改的)相同。
示例:
def view_name(request):
payload = {
# your data
}
request.session['foo'] = 'bar'
return render(request, 'index.html', payload)
我在 Django 2.2 中使用 PostgreSQL。
我正在尝试在会话中设置购物车 ID,但无论用户是否登录,每次会话都会获得 none 值。即使我尝试以隐身模式打开网站,sessionid cookie 也不会由匿名用户创建。因此,每次它都会在用户登录或未登录的情况下创建一个新购物车。
views.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"),
]
settings.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',
]
发生这种情况是因为将参数传递给函数以这种方式工作。 您正在修改请求的副本,但视图 returns 未修改。
最接近您的案例示例:
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"
如您所见,它没有被修改。
解决方案 Return 与您从 args 获得的请求实例(您要修改的)相同。 示例:
def view_name(request):
payload = {
# your data
}
request.session['foo'] = 'bar'
return render(request, 'index.html', payload)