Подтвердить что ты не робот

Django Передача данных между представлениями

Мне было интересно, что такое "лучший" способ передачи данных между представлениями. Лучше ли создавать невидимые поля и передавать их с помощью POST или я должен кодировать его в своих URL-адресах? Или есть лучший/более простой способ сделать это? Извините, если этот вопрос глуп, я довольно новичок в веб-программировании:)

Спасибо

4b9b3361

Ответ 1

Существуют разные способы передачи данных между представлениями. На самом деле это совсем не так, что проблема передачи данных между двумя разными сценариями, и, конечно же, есть и некоторые концепции межпроцессного общения. Некоторые вещи, которые приходят на ум, -

  • Запрос GET - первый запрос хитов view1- > отправка данных в браузер → переадресация браузера в view2
  • Запрос POST - (как вы сказали) Тот же поток, что и выше, но подходит, когда задействовано больше данных
  • Переменные сеанса Django - это самый простой для реализации
  • Файлы cookie на стороне клиента. Может использоваться, но есть ограничения того, сколько данных можно сохранить.
  • Общая память на уровне веб-сервера - сложно, но может быть сделано.
  • API REST API. Если вы можете иметь автономный сервер, то этот сервер может использовать REST API для вызова представлений.
  • Очереди сообщений. Опять же, если возможен автономный сервер, возможно, будут работать даже очереди сообщений. то есть первый вид (API) принимает запросы и помещает его в очередь, а другой процесс может отключать сообщения и удалять второй вид (другой API). Это отделит API первого и второго взглядов и, возможно, лучше справится с нагрузкой.
  • Кэш. Возможно, кеш, такой как memcached, может выступать в роли медиатора. Но если кто-то идет по этому маршруту, лучше использовать сеансы Django, поскольку он скрывает множество деталей реализации, но если масштаб является проблемой, memcached или redis - хорошие варианты.
  • Постоянное хранилище - хранить данные в некотором постоянном хранилище, таком как mysql. Это отделяет ваш запрос от участия (возможно, клиент, стоящий перед API) от обработки части, имея БД посередине.
  • Хранилища NoSql - если скорость записи в другом порядке составляет сотни тысяч в секунду, то производительность MySql станет узким местом (есть способы обойти, настроив конфигурацию mysql, но это не так просто), Тогда рассмотрение NoSql DB может быть альтернативой. например: dynamoDB, Redis, HBase и т.д.
  • Обработка потока - как Storm или AWS Kinesis может быть вариантом, если ваш прецедент - это вычисление в реальном времени. Фактически вы могли бы использовать AWS Lambda посередине в качестве серверного вычислительного модуля, который бы считывал и вызывал ваш второй API-интерфейс.
  • Запись данных в файл - тогда следующее представление может читать из этого файла (действительно уродливое). Это, вероятно, никогда не должно быть сделано, но здесь мы ставим здесь что-то, чего не следует делать.

Не могу больше думать. Будет обновлен, если я получу какой-либо. Надеюсь, это поможет в чем-то.