[Kiev-pm] Редирект в Dancer2
TheAthlete
theathlet at yandex.ru
Wed Dec 18 04:37:31 PST 2013
Здравствуйте!
Имеется вот такое автономное приложение на Dancer2:
app.pl
#!/usr/bin/env perl
use Dancer2;
use Data::Section::Simple qw/get_data_section/;
use DBI;
use utf8;
my $index = get_data_section('index.html');
# Settings
#---------------------
set charset => "UTF-8";
set serializer => 'JSON';
#---------------------
get '/' => sub { 'hello' };
any ['get', 'post'] => '/login' => sub {
if (request->method() eq 'POST') {
my $username = param 'username';
my $password = param 'password';
my $dbfile = 'mydb.db';
my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","") or die
$DBI::errstr;
my $statement = qq{SELECT id FROM users WHERE username=? and
password=?};
my $sth = $dbh->prepare($statement) or die $dbh->errstr;
my $rv = $sth->execute($username, $password) or die $sth->errstr;
my ($userID) = $sth->fetchrow_array;
if ($userID) {
redirect '/';
} else {
if (request->is_ajax) {
response->content_type('application/json');
return {error => 'username or password is wrong'};
}
}
}
return $index;
};
dance;
__DATA__
@@ index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Very simple login using Perl, Lovely.IO, Ajax, JSON and
SQLite</title>
<link rel="stylesheet" type="text/css" media="screen, projection"
href="http://www.blueprintcss.org/blueprint/screen.css" />
<link rel="stylesheet" type="text/css" media="screen, projection"
href="http://www.blueprintcss.org/blueprint/plugins/buttons/screen.css" />
<link rel="stylesheet" type="text/css" media="print"
href="http://www.blueprintcss.org/blueprint/print.css" />
<!--[if IE]><link rel="stylesheet" type="text/css" media="screen,
projection"
href="http://www.blueprintcss.org/blueprint/ie.css"><![endif]-->
<script type="text/javascript"
src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#loginForm").submit(function() { // loginForm отправлена
$.post('/login', { "username": $('#username').val(), "password":
$('#password').val() }, function(data, textStatus, jqXHR){
if (data.error) { // сценарий возвратил ошибку
$('#loginResult').text("data.error: " +
data.error).addClass("error");
}
});
$('#loginResult').fadeIn();
return false;
});
});
</script>
<style type="text/css">
#loginContent { width: 350px; margin: 100px auto; }
button[type] { margin: 0.5em 0; }
dd {margin: 0; padding: 0; }
</style>
</head>
<body>
<div id="loginContent" class="container">
<div id="loginResult" style="display:none;"></div>
<form id="loginForm" name="loginForm" method="post" action="/login">
<fieldset>
<legend>Enter information</legend>
<dl>
<dt><label for="username">Username</label></dt>
<dd><input type="text" id="username" name="username"
class="text" size="20" /></dd>
<dt><label for="password">Password</label></dt>
<dd><input type="password" id="password" name="password"
class="text" size="20" /></dd>
</dl>
<button type="submit" class="button positive"><img alt="ok"
src="http://www.blueprintcss.org/blueprint/plugins/buttons/icons/tick.png"
/> Login</button>
</fieldset>
</form>
</div>
</body>
</html>
Запускаю с помощью
$ plackup app.pl
Подскажите пожайлуста, как сделать редирект на роут '/', чтобы на выходе
появилось 'hello':
get '/' => sub { 'hello' };
Сейчас никакого редиректа не происходит, хотя в лог пишется, что он прошел:
127.0.0.1 - - [18/Dec/2013:14:01:41 +0200] "GET /login HTTP/1.1" 200 4694
"-" "Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16"
127.0.0.1 - - [18/Dec/2013:14:01:49 +0200] "POST /login HTTP/1.1" 302 0
"http://localhost:5000/login" "Opera/9.80 (X11; Linux x86_64)
Presto/2.12.388 Version/12.16"
127.0.0.1 - - [18/Dec/2013:14:01:49 +0200] "GET / HTTP/1.1" 200 5
"http://localhost:5000/login" "Opera/9.80 (X11; Linux x86_64)
Presto/2.12.388 Version/12.16"
Подскажите, в чем может быть проблема?
More information about the Kiev-pm
mailing list