Почему вызов get_session_key
сам по себе возвращает правильный ответ - содержащий ключ сеанса - тогда как вызов этой функции из теста через запросы вернет {"session_key": null}
?
Идентификатор сеанса хранится в cookie, как описано в документации на Как использовать Cookies :
Django обеспечивает полную поддержку анонимных сессий. Инфраструктура сеансов позволяет хранить и извлекать произвольные данные для каждого посетителя сайта. Он хранит данные на стороне сервера и объявляет об отправке и получении файлов cookie. Файлы cookie содержат идентификатор сеанса , а не сами данные (если вы не используете серверную часть на основе файлов cookie).
Теперь, если вы звоните с библиотекой requests
, вы, конечно, не передаете эти куки в систему, следовательно, вы делаете звонок без куки, и, следовательно, без идентификатора сеанса.
Однако вы можете получить куки с помощью request.COOKIES
[Django-doc] при выполнении запроса GET, например:
def test(request):
import requests
r = requests.get(
'http://127.0.0.1:8000/get_session_key',
<b>cookies=request.COOKIES</b>
)
return HttpResponse(r.content)
Поскольку идентификатор сеанса, однако, равен в файлах cookie, для этого конкретного случая нет особого смысла делать запрос GET.