Хорошая ли это практика - изменять сессию с помощью GET-запроса?
Я пытаюсь реализовать систему приглашений в Django, совместимую с django-allauth. Она похожа на django-invitations, но у меня есть некоторые требования, которые требуют собственной реализации.
После исследования способов сделать это, единственное, что я придумал на данный момент, это отправка пригласительной ссылки, которая, при получении доступа, добавляет флаг к текущей сессии, чтобы сообщить django-allauth, что регистрация открыта для этой сессии. Я думаю, что делать что-то подобное рекомендуется в документации allauth, хотя она не очень подробно описывает этот процесс.
Однако я читал в разных местах, что GET-запрос не должен вызывать побочных эффектов ( вот один из многих источников). Поскольку сессии django по умолчанию хранятся в базе данных, я думаю, что модификация сессии при GET-запросе (т.е. при нажатии на ссылку приглашения) будет означать возникновение побочных эффектов.
Проблема в том, что я не могу придумать другого способа сделать это, кроме как сильно модифицировать представления django-allauth, что было бы намного больше работы и, возможно, небезопасно для такого неопытного разработчика, как я.
Итак, так ли это, что я не должен изменять сессию при GET-запросе? Если да, то какие у меня есть другие альтернативы?
следует ли мне не изменять сессию при GET-запросе?
Нет - вы можете это сделать.
Обоснование следующее: HTTP ограничивает семантику (смысл) методов, но не ограничивает реализацию. Так что GET означает "пожалуйста, пришлите мне текущее выбранное представление для целевого ресурса"; все остальное, что вы делаете при обработке этого запроса, зависит от вас.
См. Fielding, 2002.
Важным моментом, о котором следует помнить, является ограничение на единообразие интерфейса - HTTP-компоненты общего назначения будут считать, что отправка GET на ваши ресурсы означает то же самое, что и отправка GET-запроса на любой другой ресурс в Интернете. Поскольку значение этих сообщений ограничено как "по существу только для чтения", они могут быть отправлены в самых разных обстоятельствах (пауки индексируют веб-страницы, браузеры предварительно кэшируют ссылки для улучшения воспринимаемого времени отклика, обновляют кэш, повторно передают потерянные запросы и т. д.).
Поэтому вам стоит подумать о возможном влиянии любых побочных эффектов, которые вы введете при обработке GET-запросов.