Perl Dancer: получение данных из форм
Я новичок в Perl и хотел бы знать:
- Как я могу использовать данные из HTML-форм с Perl Dancer?
Я борюсь со следующим примером. У меня есть форма на моем index.tt
файл как это:
<form action="/hello/:username" method="get" name="">
<h3>Please log in </h3>
<input type="text" name="username" required=""/>
<input type="password" name="senha" required=""/>
<button name="Submit" value="Login" type="Submit">Login</button>
</form>
Я хотел бы использовать имя пользователя из формы и создать страницу, которая возвращает введенную информацию. Итак, я проверил этот учебник, и я сделал следующее в моем Proyecto.pm
:
package Proyecto;
use Dancer ':syntax';
our $VERSION = '0.1';
get '/' => sub {
template 'index';
};
get '/hello/:username' => sub {
my $username= params('username');
return "Hola $username";
};
Но это не работает. Ребята, вы знаете, чего здесь не хватает? Спасибо!
1 ответ
<form action="/hello/:username" method="get" name="">
позвоню точно /hello/:username
без и замены. HTML не может магически заменить части исходного кода - независимо от того, использует ли серверная программа Dancer или что-то еще. (JavaScript может сделать это.)
get '/hello/:username' => sub {
соответствует всем вызовам /hello/
сопровождаемый любой строкой, как /hello/chungel
, /hello/Larry
или же /hello/:username
, последний установит значение username
в param('username')
,
Вы также добавили поле формы с name="username"
который заканчивается двумя значениями для одного ключа (одно из URL, одно из формы).
Наконец: используйте фиксированный URL в качестве действия формы:
<form action="/hello" method="get" name="">
а также
get '/hello' => sub {
Передача имени пользователя в виде значения HTML-формы (и HTTP-аргумента) здесь не дает никаких преимуществ.
Если вы действительно хотите, чтобы имя пользователя было в URL-адресе, сначала используйте другое имя в определении маршрута:
get '/hello/:url_username' => sub {
return param('url_username');
Затем вам нужно либо переписать действие формы с помощью JavaScript, либо переписать целевой URL с помощью Dancer before
крюк