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)
]