WedX - журнал о программировании и компьютерных науках

Почему использование метода POST в форме возвращает ошибку 404?

Я совершенно новичок в ruby, поэтому я сделал форму с помощью метода POST http, но он не работает следующим образом:

ruby sinatra_msg.rb  
[2017-08-04 07:47:50] INFO  WEBrick 1.3.1
[2017-08-04 07:47:50] INFO  ruby 2.3.3 (2016-11-21) [x86_64-linux]
== Sinatra (v2.0.0) has taken the stage on 4567 for development with backup from WEBrick
[2017-08-04 07:47:50] INFO  WEBrick::HTTPServer#start: pid=18141 port=4567
127.0.0.1 - - [04/Aug/2017:07:48:00 -0300] "GET / HTTP/1.1" 404 458 0.0083
127.0.0.1 - - [04/Aug/2017:07:48:00 -03] "GET / HTTP/1.1" 404 458
- -> /

У меня есть следующее дерево файлов:

.
├── sinatra_msg.rb
└── views
    ├── index.erb
    └── msg.erb

Содержимое sinatra_msg.rb: # кодировка: utf-8 требуют 'sinatra'

post '/' do
  body = params[:body]
  erb :index
end

post '/show-msg' do
   msg = params[:msg]
   text = params[:text]
  erb :msg
end

Содержимое index.erb

<!DOCTYPE html>
<html>
<head></head>
<body>
<h2>Testing Sinatra post</h2>

<form action="/show-msg" method="POST">
  subject: <input name="msg[subject]"> <br />
  text: <input name="msg[text]"> <br />
  <input type="submit">
</form>
</body>
</html>

Это содержимое msg.erb:

<!DOCTYPE html>
<html>
<head></head>
<body>
<h2>Testing output</h2>
<h1>Hi!</h1>

<p>
<%= params['msg']['text'] %>
</p>

<a href='/'>Home</a>
</body>
</html>

Что не так с этим кодом? (Используется ruby ​​2.3.3p222 (версия 56859 21 ноября 2016 г.) [x86_64-l])

ОБНОВИТЬ:

Я заменил POST на GETonly в первом разделе, и это сработало:

# coding: utf-8
require 'sinatra'

get '/' do
  body = params[:body]
  erb :index
end

post '/show-msg' do
   msg = params[:msg]
   text = params[:text]
  erb :msg
end

Интересно, правильно ли это, могу ли я сделать только GET для '/'?

04.08.2017

Ответы:


1

Код правильный.

Когда вы получаете доступ к странице в своем браузере, браузер по умолчанию отправляет http-метод GET, вы должны указать POST, когда хотите.

Возможна POST для '/', для HTTP нет ограничений на то, какой метод может быть применен к URL-адресу.

04.08.2017
  • Итак, почему этот код привел к ошибке 404 при использовании post /? 09.08.2017
  • Потому что вы, браузер, выдает get /, а не post / :) все, что вы вводите в адресной строке браузера, по умолчанию становится get. 11.08.2017
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]