Django: объект 'Response' не имеет атрибута 'get' при использовании "del request.session['key']".

Я пытаюсь практиковать свое понимание сессий Django и столкнулся с этой ошибкой. Я пытаюсь сделать следующее: сохранить счетчик для подсчета того, сколько раз пользователь посетил маршрут (' ') и отобразить его в шаблоне Django, а затем ключ будет уничтожен при посещении маршрута ('/destroy').

Views.py:

import re
from django.shortcuts import redirect, render
from flask import session,redirect

def index(request):
    request.session['counter']=int(request.session.get('counter',0))+1
    return render(request,'index.html')

def destroy(request):
    del request.session['counter']
    return redirect('')

urls.py:

from django.urls import path     
from . import views
urlpatterns = [
    path('', views.index),
    path('destroy',views.destroy)
]

Файл шаблона:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Counter</title>
</head>
<body>
    <div class="wrapper">
        <h1>Counter</h1>
        <p>{{request.session.counter}} times</p>
    </div>
</body>
</html>

Вы используете функцию redirect из flask, но Django ожидает ответ от Django, поэтому:

from django.shortcuts import redirect, render
from flask import session  # no redirect

def index(request):
    request.session['counter'] = int(request.session.get('counter',0))+1
    return render(request,'index.html')

def destroy(request):
    del request.session['counter']
    return redirect('index')

Вероятно, вам также не следует использовать session из flask. В urls.py вы затем даете индексу соответствующее имя, так что redirect('index') может ссылаться на это:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('destroy/', views.destroy)
]
Вернуться на верх