Perl Dancer, FPW 2010
Upcoming SlideShare
Loading in...5
×
 

Perl Dancer, FPW 2010

on

  • 15,274 views

Développement Web avec Perl Dancer, Journées Perl 2010, 11 juin 2010, Calais

Développement Web avec Perl Dancer, Journées Perl 2010, 11 juin 2010, Calais

Statistics

Views

Total Views
15,274
Views on SlideShare
6,807
Embed Views
8,467

Actions

Likes
0
Downloads
31
Comments
0

16 Embeds 8,467

http://perldancer.org 4940
http://www.perldancer.org 3022
http://www.sukria.net 437
http://dancer.pm 34
http://localhost 10
http://www.slideshare.net 7
http://translate.googleusercontent.com 3
https://duckduckgo.com 3
http://0.0.0.0 2
http://webcache.googleusercontent.com 2
http://127.0.0.1 2
http://supernova.preshweb.co.uk 1
https://webcache.googleusercontent.com 1
http://172.16.123.130 1
http://www.irkstroi.ru 1
http://192.168.1.204 1
More...

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Perl Dancer, FPW 2010 Perl Dancer, FPW 2010 Presentation Transcript

  • Perl Dancer Journées Perl 2010 11 juin 2010, Calais
  • Alexis Sukrieh Twitter : @sukria CPAN : sukria http://www.sukria.net
  • http://perldancer.org
  • $ sudo cpan m Dancer
  • http://github.com/sukria/Dancer
  • framework web pour Perl
  • Encore un ?
  • OUI
  • Pourquoi ?
  • Dépasser CGI.pm
  • Oublier CGI.pm
  • Sans devenir Catalyst
  • Apporter une différence
  • Ruby
  • Nouvelle approche
  • Pourquoi pas Perl ?
  • Dancer
  • Dancer est un framework...
  • un micro framework
    • Léger
    • Autonome
    • Peu de dépendances
    • Compatible PSGI/Plack
    • Facile
    • Evolutif
    • Hello World
  • package MyApp ; use Dancer; get '/' => sub { 'Hello FPW 2010!' }; dance;
  • serveur web embarqué
  • $ ./myApp.pl >> Listening on 127.0.0.1:3000 == Entering the development dance floor ...
  • Créer une application
  • Génération d'un squellette $ dancer -a WebApp + WebApp/app.psgi + WebApp/config.yml + WebApp/environments [...] + WebApp/lib/WebApp.pm + WebApp/views + WebApp/views/index.tt [...] + WebApp/WebApp.pl + WebApp/t/002_index_route.t + WebApp/t/001_base.t + WebApp/Makefile.PL
  • Layout CPAN-friendly
  • Dancer::Test use Test::More tests => 3; use WebApp; use Dancer::Test; route_exists [GET => '/']; response_status_is ['GET' => '/'], 200;
  • Application pré-configurée config.yml environments/development.yml environments/production.yml
  • # config.yml layout: 'application' foo: 42 content_type: 'text/plain'
  • config.yml = Configuration globale
  • development.yml warnings: 1 show_errors: 1 auto_reload: 1
  • production.yml warnings: 0 show_errors: 0 auto_reload: 0
  • $ ./WebApp.pl -e production Démarre l'application avec l'environnement « production »
  • Ready to rock!
  • Les route handlers
  • méthode HTTP
  • + path
  • + sub { }
  • get '/' => sub { ... };
  • get '/' => sub { ... };
  • get '/' => sub { ... };
  • get '/' => sub { ... } ;
  • /foo /bar/:var /baz/* r('/stuff/([a-z0-9]+)/')
  • /foo /bar/:var /baz/* r('/stuff/([a-z0-9]+)/') qr{/stuff/([a-z0-9]+)/} NEW
  • Chemins statiques / /foo /bar/baz
  • Chemins avec tokens /hello/:buddy my $name = params->{buddy}
  • Chemins avec jokers /show/*.* my ($file, $ext) = splat;
  • Chemins avec expressions régulières r('/post/([a-z0-9]+)') my ($post) = splat; # $1
  • Dancer est un aiguilleur
  • Vers le bon route handler
  • 404 Si aucun ne correspond
  • $appdir/public
  • Route handler trouvé, Execution de son code
  • Un seul objectif
  • La réponse
  • Contenu get '/showme' => sub { template 'showme', { var => 'foo'}; };
  • Headers get '/' => sub { headers 'X-MyHead1' => 42; ... };
  • Requête get '/' => sub { my $path = request ->path; my @uploads = request ->uploads(); my $h1 = request ->header('X-MyHead1'); ... };
  • Passer get '/lazy' => sub { pass ; };
  • Servir un fichier get '/dowload/:file' => sub { my $file = params->{file}; send_file $file; };
  • Déclencher une erreur get '/forbidden' => sub { send_error 'Nope'; };
  • Rediriger get '/forbidden' => sub { redirect '/better/place'; };
  • valeur de retour = contenu de la réponse
  • Fonctionnalités Avancées
  • Logs
  • Usage get '/' => sub { debug 'poupoutte' ; warning 'a warning' ; error 'an error' ; };
  • Configuration log  : core|debug|warning|error logger  : file|console|...
  • sukria@razor:/tmp/WebApp$ ./WebApp.pl [28877] core @0.000011> loading application WebApp in ./WebApp.pl l. 3 [28877] core @0.002561> loading Standalone handler in /usr/local/share/perl/5.10.1/Dancer.pm l. 193 [28877] core @0.000054> request: GET / in /usr/local/share/perl/5.10.1/Dancer/Handler/Standalone.pm l. 39 [28877] debug @0.000326> [hit #1] a debug in /tmp/WebApp/lib/WebApp.pm l. 7
  • Logger engines Dancer::Logger::File Dancer::Logger::Console Dancer::Logger::Syslog Dancer::Logger::LogHandler ...
  • Sessions
  • Interface universelle
  • Ecrire post '/login' => sub { ... if ($user) { session 'user' => $user; } };
  • Lire get '/home' => sub { ... unless ( session ('user')) { return redirect '/login'; } };
  • Session engines Dancer::Session::Simple Dancer::Session::YAML Dancer::Session::Memcache Dancer::Session::Storable Dancer::Session::Cookie ...
  • Filtres
  • Initialiser un contexte before sub { var 'foo' => 42; var 'dbh' => DBI->connect(...); };
  • Stopper l'execution before sub { ... return halt ('stop here'); };
  • Contrôles systématiques before sub { if (not session('user')) { redirect '/login'; } };
  • Serializers
  • Valeur de retour Serialisée set serializer => 'JSON';
  • get => '/user/:id' => sub { ... return { user => $user }; };
  • Sans serializer $ curl http://0:3000/user/42 HASH(0x295d568)
  • Avec serializer $ curl http://0:3000/user/42 {"name":"Larry Wall","id":42}
  • Serializer engines Dancer::Serializer::JSON Dancer::Serializer::YAML Dancer::Serializer::Dumper Dancer::Serializer::Mutable
  • Plugins
  • Enrichir la syntaxe
  • Design patterns
  • use Dancer::Plugin:: Database ; get '/' =>sub { ... my $sth = database ->prepare(...); };
  • Ecrire un plugin
  • package Dancer::Plugin::FPW2010; use Dancer::Plugin; register ' add_fpw2010_route ' => sub { get '/fpw2010' => sub { 'Bonjour FPW 2010 !'  }; }; register_plugin;
  • Deja plusieurs plugins sur CPAN Dancer::Plugin::Validation Dancer::Plugin::Database Dancer::Plugin::REST Dancer::Plugin::Email ...
  • Déploiement
  • Pour déployer Dancer PSGI/Plack
  • Plack - Perl Rack - Ruby WSGI - Python
  • Adaptateur universel serveur / application
  • app.psgi connecteur Plack
  • $ plackup -a app.psgi &
  • Tous les serveurs web ont des adaptateurs PSGI
  • Apache (mod_psgi) Nginx Starman Perlbal HTTP::Server::PSGI HTTP::Server::Fast ...
  • Exemple Apache <Location /> SetHandler perl-script PerlResponseHandler Plack::Handler::Apache2 PerlSetVar psgi_app /path/to/app.psgi </Location>
  • CGI : dispatch.cgi FastCGI : dispatch.fcgi Plack::Handler::AnyEvent Plack::Handler::Starman Plack::Handler::* ...
  • Ecosystème
  • Dancer::Cookbook Dancer::Deployment Dancer::Template::Simple Dancer::Template::TemplateToolkit Dancer::Test Dancer::Session::YAML Dancer::Session::Simple Dancer::Introduction Dancer::Template::Alloy Dancer::Template::TemplateSandbox Dancer::Template::Tenjin Task::Dancer Dancer::Plugin::Database Dancer::Template::HtmlTemplate Dancer::Logger::Syslog Dancer::Session::Storable Dancer::Plugin::REST Dancer::Plugin::Validation Dancer::Template::Tiny Dancer::Plugin::SiteMap Dancer::Plugin::Email Dancer::Template::Haml Dancer::Serializer::YAML Dancer::Template::Mason Dancer::Session::Memcache Dancer::Template::MicroTemplate Dancer::Session::Memcache Dancer::Session::Cookie Dancer::Serializer::XML Dancer::Serializer::Mutable Dancer::Serializer::JSON Dancer::Logger::LogHandler ...
  • GitHub 30 forks 130 followers
  • +50 distributions +10 auteurs
  • Communauté irc.perl.org/#dancer [email_address]
  • Docs Dancer Dancer::Introduction Dancer::Cookbook Dancer::Deployment ...
  • http://perldancer.org