Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Dancer
(the Effortless Perl Web Framework)
About me
●   Sawyer X
●   Sysadmin / Perl Ninja
●   Israel.pm / Haifa.pm / TelAviv.pm / Rehovot.pm
●   I do system, networ...
Perl web recap




    1995
    CGI
Perl web recap



               2010
    Many frameworks
(including micro-frameworks like Dancer)
The big web religions, illustrated
Ruby – the fanboys
Python – the sticklers
PHP – the nonsensical
Perl – the nutcases
Nutcases?
●   Yes, we are insane (but not LISP-insane)
●   Insanity is a whole lot of fun!
●   Insanity gives us flexibili...
Flask (Pythonese)
from flask import Flask
app = Flask(__name__)


@app.route("/", methods=['GET'])
def hello():
    return...
Dancer (Perlesque)
use Dancer;


get “/hi” => sub {
    “Hello, World!”
};


dance;
In comparison
from flask import Flask            use Dancer;
app = Flask(__name__)


@app.route("/", methods=['GET'])   ge...
Dancer treats
●   Both read and write, easily!
●   Route-based (started as a port of Sinatra)
●   PSGI/Plack compliant (PS...
Recipe for Dancing
●   Take an HTTP method
●   Add a path to that
●   Mix with a subroutine
●   And sprinkle plugins and k...
Dancer route structure
get     '/path' => sub { … };
post    '/path' => sub { … };
put     '/path' => sub { … };
del     '...
Dancer
●   Paths can contain variables
    get '/hello/:entity/'


●   Paths can be Regular Expressions
    get qr{/ (w+) ...
Dancer login example
post '/login' => sub {
    # Validate the username and password
    if ( params­>{user} eq 'bob' &&
 ...
Templating
get '/' => sub {
    template index => {
        greeting => 'welcome'
    }
};
More nifty stuff
●   headers 'My­X­Header' => 'Value'
●   send_file('report.tar.gz')
●   set_cookie name    => 'value',
  ...
Dancer as Perl philosophy
●   Dancer is succinct, efficient and easy to work with
●   Dancer is daring
    (Do you have ro...
Oh yeah, route caching...
Dancer::Plugin::REST
get '/user/:id.:format' => sub {
    UserRS­>find( params­>{id} );
};
# curl http://mywebservice/user...
Dancer::Plugin::SiteMap
    use Dancer::Plugin::SiteMap;


●   You get: /sitemap and /sitemap.xml
●   “Yup, it's that simp...
Dancer::Plugin::Email
post '/contact' => sub {
    email {
        to      => 'a@b.com',
        subject => 'Test',
      ...
Dancer::Plugin::Authorize
post '/login' => sub {
    my $user = params­>{'user'};
    my $pass = params­>{'pass'};
    if ...
Dancer::Plugin::Ajax
    ajax '/check_for_update' => sub {
        # some ajax code
    };

●   Pass if X-Request-With not...
Dancer::Plugin::DBIC
●   DBIC (DBIx::Class) – a sophisticated ORM
●   Configure the connection in the config file
●   Make...
Dancer::Plugin::Database
●   Database(s) connection in Dancer
    get '/widget/view/:id' => sub {
       my $sth = databas...
In culmination
  Dancer is beautiful and fun
The way programming should be



        PerlDancer.org
search.cpan.org/perld...
Perl Dancer for Python programmers
Upcoming SlideShare
Loading in …5
×

of

Perl Dancer for Python programmers Slide 1 Perl Dancer for Python programmers Slide 2 Perl Dancer for Python programmers Slide 3 Perl Dancer for Python programmers Slide 4 Perl Dancer for Python programmers Slide 5 Perl Dancer for Python programmers Slide 6 Perl Dancer for Python programmers Slide 7 Perl Dancer for Python programmers Slide 8 Perl Dancer for Python programmers Slide 9 Perl Dancer for Python programmers Slide 10 Perl Dancer for Python programmers Slide 11 Perl Dancer for Python programmers Slide 12 Perl Dancer for Python programmers Slide 13 Perl Dancer for Python programmers Slide 14 Perl Dancer for Python programmers Slide 15 Perl Dancer for Python programmers Slide 16 Perl Dancer for Python programmers Slide 17 Perl Dancer for Python programmers Slide 18 Perl Dancer for Python programmers Slide 19 Perl Dancer for Python programmers Slide 20 Perl Dancer for Python programmers Slide 21 Perl Dancer for Python programmers Slide 22 Perl Dancer for Python programmers Slide 23 Perl Dancer for Python programmers Slide 24 Perl Dancer for Python programmers Slide 25 Perl Dancer for Python programmers Slide 26 Perl Dancer for Python programmers Slide 27 Perl Dancer for Python programmers Slide 28 Perl Dancer for Python programmers Slide 29 Perl Dancer for Python programmers Slide 30 Perl Dancer for Python programmers Slide 31
Upcoming SlideShare
Writing webapps with Perl Dancer
Next
Download to read offline and view in fullscreen.

14 Likes

Share

Download to read offline

Perl Dancer for Python programmers

Download to read offline

This is a talk given at PyWeb IL Oct 4th.

Related Books

Free with a 30 day trial from Scribd

See all

Perl Dancer for Python programmers

  1. 1. Dancer (the Effortless Perl Web Framework)
  2. 2. About me ● Sawyer X ● Sysadmin / Perl Ninja ● Israel.pm / Haifa.pm / TelAviv.pm / Rehovot.pm ● I do system, networking, web, applications, etc. ● http://blogs.perl.org/users/sawyer_x/ ● http://search.cpan.org/~xsawyerx/
  3. 3. Perl web recap 1995 CGI
  4. 4. Perl web recap 2010 Many frameworks (including micro-frameworks like Dancer)
  5. 5. The big web religions, illustrated
  6. 6. Ruby – the fanboys
  7. 7. Python – the sticklers
  8. 8. PHP – the nonsensical
  9. 9. Perl – the nutcases
  10. 10. Nutcases? ● Yes, we are insane (but not LISP-insane) ● Insanity is a whole lot of fun! ● Insanity gives us flexibility ● Flexibility gives us cool stuff ● Like Moose and meta-programming ● Like DBIx::Class ● Like Dancer
  11. 11. Flask (Pythonese) from flask import Flask app = Flask(__name__) @app.route("/", methods=['GET']) def hello():     return "Hello World!" if __name__ == "__main__":     app.run()
  12. 12. Dancer (Perlesque) use Dancer; get “/hi” => sub {     “Hello, World!” }; dance;
  13. 13. In comparison from flask import Flask use Dancer; app = Flask(__name__) @app.route("/", methods=['GET']) get “/” => sub { def hello():   “Hello, World!”     return "Hello World!" }; if __name__ == "__main__":     app.run() dance;
  14. 14. Dancer treats ● Both read and write, easily! ● Route-based (started as a port of Sinatra) ● PSGI/Plack compliant (PSGI is our WSGI) ● Minimum dependencies ● Any app is also a web server ● CPAN-friendly (<3 CPAN)
  15. 15. Recipe for Dancing ● Take an HTTP method ● Add a path to that ● Mix with a subroutine ● And sprinkle plugins and keywords on top
  16. 16. Dancer route structure get     '/path' => sub { … }; post    '/path' => sub { … }; put     '/path' => sub { … }; del     '/path' => sub { … }; options '/path' => sub { … }; any     '/path' => sub { … };
  17. 17. Dancer ● Paths can contain variables get '/hello/:entity/' ● Paths can be Regular Expressions get qr{/ (w+) / d{2,3} (.+)? }x
  18. 18. Dancer login example post '/login' => sub {     # Validate the username and password     if ( params­>{user} eq 'bob' &&          params­>{pass} eq 'LetMeIn' ) {         session user => params­>{user};         redirect params­>{path} || '/';     } else {         redirect '/login?failed=1';     }  };
  19. 19. Templating get '/' => sub {     template index => {         greeting => 'welcome'     } };
  20. 20. More nifty stuff ● headers 'My­X­Header' => 'Value' ● send_file('report.tar.gz') ● set_cookie name    => 'value',            expires => ( time + 3600 ),            domain  => 'foo.com' ● status 'not_found' ● to_json, to_yaml, to_xml ● my $file        = upload('file_input') ● my $all_uploads = request­>uploads
  21. 21. Dancer as Perl philosophy ● Dancer is succinct, efficient and easy to work with ● Dancer is daring (Do you have route caching in Django?) (Websockets in near future!) ● Dancer has a lot of plugins: (engines for sessions, logging, templates) ● Serializers (JSON, YAML, XML) ● Route filters (before, after, before_template)
  22. 22. Oh yeah, route caching...
  23. 23. Dancer::Plugin::REST get '/user/:id.:format' => sub {     UserRS­>find( params­>{id} ); }; # curl http://mywebservice/user/42.json { "id": 42, "name": "John Foo",              "email": "john.foo@hopkins.com" } # curl http://mywebservice/user/42.yml ­­ id: 42 name: "John Foo" email: "john.foo@hopkins.com"
  24. 24. Dancer::Plugin::SiteMap use Dancer::Plugin::SiteMap; ● You get: /sitemap and /sitemap.xml ● “Yup, it's that simple.”
  25. 25. Dancer::Plugin::Email post '/contact' => sub {     email {         to      => 'a@b.com',         subject => 'Test',         message => $msg,         attach  => [ path => 'name' ],     } };
  26. 26. Dancer::Plugin::Authorize post '/login' => sub {     my $user = params­>{'user'};     my $pass = params­>{'pass'};     if ( auth( $user, $pass ) ) {         if ( auth_asa('guest')  ) {...}         if ( auth_can('create') ) {...}     } };
  27. 27. Dancer::Plugin::Ajax ajax '/check_for_update' => sub {     # some ajax code }; ● Pass if X-Request-With not “XMLHttpRequest” ● Disable the layout ● The action built is a POST request
  28. 28. Dancer::Plugin::DBIC ● DBIC (DBIx::Class) – a sophisticated ORM ● Configure the connection in the config file ● Make the ResultSets available in routes
  29. 29. Dancer::Plugin::Database ● Database(s) connection in Dancer get '/widget/view/:id' => sub {    my $sth = database­>prepare(         'select * from widgets where id = ?'    );    $sth­>execute( params­>{id} );    template display_widget => {        widget => $sth­>fetchrow_hashref,    }; };
  30. 30. In culmination Dancer is beautiful and fun The way programming should be PerlDancer.org search.cpan.org/perldoc?Dancer
  • jeanclaudedalot1

    Feb. 16, 2019
  • OrazioAiello1

    Jan. 29, 2017
  • MilindNayse

    Apr. 14, 2016
  • JunhoChoi1

    Dec. 4, 2011
  • clsung

    Dec. 19, 2010
  • maspalio

    Dec. 14, 2010
  • alistratov

    Oct. 8, 2010
  • avoronov

    Oct. 8, 2010
  • mrluanma

    Oct. 7, 2010
  • j1n3l0

    Oct. 7, 2010
  • dtpub

    Oct. 7, 2010
  • burakgursoy

    Oct. 6, 2010
  • bretnac

    Oct. 6, 2010
  • ironcamel

    Oct. 6, 2010

This is a talk given at PyWeb IL Oct 4th.

Views

Total views

30,877

On Slideshare

0

From embeds

0

Number of embeds

16,243

Actions

Downloads

103

Shares

0

Comments

0

Likes

14

×