Django request.session не работает должным образом
Я создаю веб-приложение и использую ajax для отправки данных из frontend в backend, чтобы я мог обрабатывать формы и сохранять их в базе данных. Я отправляю данные из ajax в метод get-data и оттуда сохраняю их в сессию, но когда я захожу на страницу /success и пытаюсь получить те же данные из сессии, она сообщает мне, что ключ не существует. Как такое возможно? Вот код, приведенный ниже.
$.ajax({
type: "POST",
url: "/get-data/",
data: JSON.stringify(obj),
dataType: "text",
headers: { "X-CSRFToken": getCookie("csrftoken") },
success: function (response) {
console.log("success"); // i get this, so i it means that the ajax works properly.
},
error: function (response, err, err2) {
console.log(err2);
},
});
def get_data(request):
if request.method == "POST":
if is_ajax(request):
rec_data = json.loads(request.body)
print("the request came")
request.session["data_check_form"] = rec_data
print("everything set")
print(request.session["data_check_form"]) # i print this and i get the json file properly
return JsonResponse({"success": "200"})
def success_view(request):
print("test")
data = request.session.get("data_check_form", False)
print(data) # i get false
...
Используйте request.session.modified = True после любых изменений в session как
def get_data(request):
if request.method == "POST":
if is_ajax(request):
rec_data = json.loads(request.body)
print("the request came")
request.session["data_check_form"] = rec_data
request.session.modified = True
print("everything set")
print(request.session["data_check_form"]) # i print this and i get the json file properly
return JsonResponse({"success": "200"})
Чтобы изменить это поведение по умолчанию, установите параметр SESSION_SAVE_EVERY_REQUEST в True. При установке значения True, Django будет сохранять сессию в базе данных при каждом запросе.
.