Как отобразить сообщения пользователю после POST + перенаправление HTTP

C ++ является одним из худших языков программирования - НИКОГДА.

У него есть все отличительные признаки чего-то, разработанного комитетом - он плохо выполняет какую-либо заданную работу и выполняет некоторые работы (например, ОО) ужасно. У него есть отчаяние «кухонной раковины», которое просто не исчезнет.

Это ужасный «первый язык», с которым нужно учиться программировать. Вы не получаете никакой элегантности, никакой помощи (от языка). Вместо этого у вас есть медвежьи ловушки и минные поля (управление памятью, шаблоны и т. Д.).

Это не очень хороший язык для изучения ОО-концепций. Он ведет себя как «C с оберткой класса» вместо правильного языка OO.

Я мог бы продолжать, но пока оставлю это. Мне никогда не нравилось программирование на C ++, и хотя я «порезался» на FORTRAN, я полностью любил программирование на C. Я все еще думаю, что C был одним из замечательных «классических» языков. Что-то, что C ++, конечно, НЕ, на мой взгляд.

Приветствия,

-R

РЕДАКТИРОВАТЬ: Ответить на комментарии по обучению C ++. Вы можете преподавать C ++ двумя способами - либо преподавать его как C "на стероидах" (начните с переменных, условий, циклов и т. Д.), Либо преподавать как чистый язык "OO" (начните с классов, методов и т. Д.). Вы можете найти учебные тексты, которые используют тот или иной из этих подходов. Я предпочитаю последний подход (сначала ОО), поскольку он подчеркивает возможности С ++ как языка ОО (который был первоначальным акцентом на дизайн С ++). Если вы хотите преподавать C ++ «как C», то я думаю, что вы должны преподавать C, а не C ++.

Но проблема с C ++ как с первым языком в моем опыте заключается в том, что язык просто слишком БОЛЬШОЙ, чтобы преподавать за один семестр, плюс большинство «вводных» текстов пытаются охватить все. Просто невозможно охватить все темы в курсе «первого языка». Вы должны по крайней мере разделить его на 2 семестра, и тогда он больше не будет «первым языком», ИМО.

Я преподаю C ++, но только как «новый язык», то есть вы должны хорошо владеть каким-то предшествующим «чистым» языком (не скриптами или макросами), прежде чем вы сможете записаться на курс. C ++ - это очень хороший «второй язык» для изучения, IMO.

-R

'Нет Редактировать: (к Конраду)

Я совершенно не согласен с тем, что C ++ "во всех отношениях превосходит" C. Я потратил годы на программирование программ на C для микроконтроллеры и другие встроенные приложения. Компиляторы C для этих устройств высоко оптимизированы, часто производя код так же хорошо, как и ассемблер, написанный вручную. Когда вы переходите на C ++, вы получаете огромные накладные расходы, налагаемые компилятором для управления функциями языка, которые вы, возможно, не используете. Во встроенных приложениях вы мало что получаете, добавляя классы и тому подобное, IMO. Что вам нужно, это жесткий, чистый код. Вы можете написать это на C ++, но тогда вы просто пишете на C, и компиляторы C более оптимизированы в этих приложениях.

Я написал MIDI-движок, сначала на C, затем на C ++ (по запросу производителя) для встроенного контроллера (звуковой карты). В конце концов, чтобы удовлетворить требования к производительности (тайминги MIDI и т. Д.), Нам пришлось вернуться к чистому C для всего основного кода. Мы могли использовать C ++ для высокоуровневого кода, и иметь классы было очень приятно - но нам нужен был C, чтобы получить производительность на более низком уровне. Код на C был на порядок быстрее, чем код на C ++, но ассемблер с ручным кодом был лишь немного быстрее, чем скомпилированный код на C. Это было еще в начале 1990-х годов, просто чтобы правильно описать события.

-R

21
задан Mr Lister 4 May 2012 в 12:15
поделиться

6 ответов

Pretty much every website that allows users to log in does so by relying on a cookie. It ain't a perfect solution, but it's the best we got.

Also session handling is one of those things that a web development framework typically takes care of for you.

1
ответ дан 29 November 2019 в 21:49
поделиться

Я использую метод переменной сеанса. Мне не очень нравится встраивать сообщения об ошибках для отображения в URL-адресе, особенно с указанными вами проблемами сохранения / совместного использования URL-адресов, и мне нравится, что если пользователь перезагружает целевую страницу, это будет чистый экземпляр.

1
ответ дан 29 November 2019 в 21:49
поделиться

Это зависит от того, на какой платформе вы работаете.

Ruby on Rails называет это flash [: notice] = "Ваше действие было выполнено", ASP.NET MVC вызывает это TempData [ "notice"] = "Ваше действие было выполнено" ...

В основном они просто сохраняют данные в HttpSession только для одного пути туда и обратно. Таким образом вы можете получить данные по другому веб-запросу.

3
ответ дан 29 November 2019 в 21:49
поделиться

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

Большинство удобных решений: на основе сеанса или имеют более серьезные недостатки (например, встраивание сообщения в строку запроса).

Если вы не можете гарантировать, что у вас будут сеансы, можно воспользоваться другим (довольно дорогостоящим) методом - перенаправить на разные представления в зависимости от результата отправки формы. Например, вы можете перенаправить на EditWidgetView , EditWidgetSaveSuccessfulView или EditWidgetSaveErrorView (или, возможно, вы просто не перенаправляете при ошибках). В некоторых языках и фреймворках это непрактично до такой степени, что вы вообще отказываетесь от показа сообщений подтверждения / ошибок, но для других это может того стоить.

9
ответ дан 29 November 2019 в 21:49
поделиться

If you don't want to rely on sessions for whatever reason you could use a Get variable / custom url and then if that variable is present, check the refer. If the refer is proper, then display the message. Yes, this adds reliance on refers being sent in order to show the confirmation message, but otherwise you're relying on sessions (which while reliable, aren't 100% perfect for all solutions either.)

And honestly, some large sites that are normally pretty good about this kind of thing just stick a "actiondone=true" in the url. (I've noticed Facebook does it in some places.)

6
ответ дан 29 November 2019 в 21:49
поделиться

Очень поздно к этому обсуждению. .

Вы можете использовать комбинацию двух предложенных вариантов.

После запроса POST клиент перенаправляется (303) на URL-адрес, указывающий, что на этот запрос может быть ответное сообщение:

Client: GET  http://example.com/foo.cgi
Server: 200  Ok

Client: POST http://example.com/bar.cgi
Server: 303  http://example.com/foo.cgi?msg=true

Если аргумент msg имеет значение истина сообщение будет найдено в сеансе и (если найдено) включено в ответ клиенту.
Если аргумент msg равен ! истина (или отсутствует), шаг поиска пропускается.

С помощью этого решения вы предотвращаете отображение фактического сообщения в URL-адресе, URL-адрес только указывает на то, что сообщение могло быть. Кроме того, сообщение отображается только при необходимости (= при обнаружении в сеансе).

Еще одним преимуществом является то, что это решение также позволяет включать в HTTP-ответы надлежащий контроль денежных средств.

2
ответ дан 29 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: