Django 2,2 | Cook ie с именем "sessionid" не создается, пока анонимный пользователь открывает сайт - PullRequest
0 голосов
/ 18 июня 2020

Я использую PostgreSQL с Django 2.2.

Я пытаюсь установить идентификатор корзины в сеансе, но каждый раз, когда сеанс не получает никакого значения, пока пользователь входит в систему или нет. Даже если я пытался открыть сайт в режиме инкогнито, sessionid cook ie не создается анонимными пользователями. Из-за этого каждый раз создается новая корзина, в которой пользователь входит или нет.

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',
]

1 Ответ

1 голос
/ 19 июня 2020

Это происходит потому, что передача аргументов в функцию работает таким образом. Вы изменяете копию запроса, но представление возвращает неизмененную.

Ближайший к вашему примеру случай:

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)

«Я верный запрос»

Как видите, он не изменен.

Решение Вернуть тот же экземпляр запроса (который вы хотите изменить), как вы получили из args. Пример:

def view_name(request):
    payload = {
        # your data
    }
    request.session['foo'] = 'bar'
    return render(request, 'index.html', payload)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...