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.
Rails vs Web2Py


From ”Ruby On Rails” to ”Web to Python”




                             
                              ...
Controllers

         
             class MyTestController < ApplicationController
                 def index
           ...
Params

           class MyTestController < ApplicationController
                def index
                    render_te...
Dispatching

             http://hostname/MyTest/index

                       class MyTestController < ApplicationContro...
Routing

    



        routes.rb




        
        routes.py (reversed routing, with or without 
        regex, IP ...
Views

        
            <table>
             <% @recipes.each do |recipe| %>
              <tr>
               <td><%...
Passing vars in views

        
            class MyTestController < ApplicationController
                def index
    ...
Layouts

        
             <title>Layout Example</title>
               <body>
                 <%= yield %>
        ...
Forms

        
            <%= form_tag :action => "update" dp %>
             Name: <%= text_field "item", "name" %><br...
Validation

        
            ActiveForm::Definition::create :article do |f|
             f.section :details do |s|
  ...
Migrations

        
              class Article < ActiveRecord::Migration
                def self.up
                  ...
Queries

        
               Article.find(:first,:conditions => [
                  "id > :id AND name = :name",
    ...
Gems / Plugins

    



        Lots of them 




    



        Free Appliaces (plugin system still under 
        pla...
Installation

    



        Must install ruby, Rails, gems, databases 




    



        Just a zip (cross­platform)...
Web Administration

    



        Nope




        
        Killer­full fledged administration (even 
        dedicate...
Upload files

    



        Plugins (paperclip)




    



        Built in (specify as an 'upload' field


         ...
Users/Roles

    



        Plugins




        
        Built in (trivial to override)


                             ...
Application Distribution 

    



        'Frozen' Applications 




        
        Share the application directory
 ...
Ticketing system/VC/ Unit testing

    



        External




        
        Built­in (you can even make patches via...
Google App Engine

    



        via JRuby (with LOTS of changes and hacks)




        
        Natively (only framew...
Caching

    



        MemCache




    



        For any function cache: in RAM, disk, 
        memcache or combina...
Translations

    



        Natively (but still hard to use)




    



        You can add/edit translations via web...
Routing

    



        routes.rb




    



        routes.py (reversed routing, with or without 
        regex, IP f...
Support

    



        Many books, very big community and tutorials




        
        Two 'manual' books, smaller b...
 




    Thank for watching! Questions?




        http://jon.is.emotionull.com
           jon@emotionull.com
          ...
Upcoming SlideShare
Loading in …5
×

Rails vs Web2py

8,727 views

Published on

My presentation for Athens Digital Week 2009

Published in: Technology

Rails vs Web2py

  1. 1. Rails vs Web2Py From ”Ruby On Rails” to ”Web to Python”     http://jon.is.emotionull.com
  2. 2. Controllers     class MyTestController < ApplicationController     def index         render_text “Hello World”     end end    def index():      return "Hello World"    
  3. 3. Params    class MyTestController < ApplicationController     def index         render_text “Hello ”+params[:who]     end end    def index():      return "Hello %s" % request.vars.who def index():      return "Hello %s" % request.args[0]    
  4. 4. Dispatching      http://hostname/MyTest/index class MyTestController < ApplicationController     def index         render_text “Hello World”     end end     http://hostname/myapp/mycontroller/index calls def index():      return "Hello %s" % request.vars.who    
  5. 5. Routing  routes.rb    routes.py (reversed routing, with or without  regex, IP filtering)    
  6. 6. Views    <table>  <% @recipes.each do |recipe| %>   <tr>    <td><%= recipe.name %></td>   </tr>  <% end %> </table>    <table>  {{for recipe in recipes:}}>   <tr>    <td>{{=recipe.name}}</td>   </tr>  {{pass}}     </table>
  7. 7. Passing vars in views    class MyTestController < ApplicationController     def index         @message=“Hello World”     end end    def index():      return dict(message=”Hello World”)    
  8. 8. Layouts    <title>Layout Example</title>   <body>     <%= yield %>   </body> </html>    <title>Layout Example</title>   <body>     {{include}}   </body> </html> and in view:     {{extend ‘layout.html’}} body
  9. 9. Forms    <%= form_tag :action => "update" dp %>  Name: <%= text_field "item", "name" %><br />  Value: <%= text_field "item", "value" %><br />  <%= submit_tag %> <%= end %>    def contact():     form = SQLFORM(Article)     if form.accepts(request.vars):         redirect('thanks')     return dict(form=form)    
  10. 10. Validation    ActiveForm::Definition::create :article do |f|  f.section :details do |s|  s.text_element :email,:class => 'required' do |e|     e.validates_as_email :msg => 'not email'  end end    db.define_table(‘Article’,SQLField(‘email’)) db.Article.email.requires=IS_EMAIL()    
  11. 11. Migrations    class Article < ActiveRecord::Migration   def self.up       create_table :articles do |t|         t.column :name, :string         t.column :description, :text       end   end end    Article=db.define_table(‘Article’,            SQLField(‘email’,’string’),            SQLField(‘description’,’text’)    
  12. 12. Queries    Article.find(:first,:conditions => [    "id > :id AND name = :name",         {:id => 3,      :name => "test" }])    db(Article.id>3 and Article.name==’test’).select()    
  13. 13. Gems / Plugins  Lots of them   Free Appliaces (plugin system still under  planning)    
  14. 14. Installation  Must install ruby, Rails, gems, databases   Just a zip (cross­platform)    
  15. 15. Web Administration  Nope    Killer­full fledged administration (even  dedicated for apps)    
  16. 16. Upload files  Plugins (paperclip)  Built in (specify as an 'upload' field    
  17. 17. Users/Roles  Plugins    Built in (trivial to override)    
  18. 18. Application Distribution   'Frozen' Applications     Share the application directory ByteCode compilation    
  19. 19. Ticketing system/VC/ Unit testing  External    Built­in (you can even make patches via web  interface)    
  20. 20. Google App Engine  via JRuby (with LOTS of changes and hacks)    Natively (only framework that runs  UNMODIFIED on GAE)    
  21. 21. Caching  MemCache  For any function cache: in RAM, disk,  memcache or combinations    
  22. 22. Translations  Natively (but still hard to use)  You can add/edit translations via web interface    
  23. 23. Routing  routes.rb  routes.py (reversed routing, with or without  regex, IP filtering)    
  24. 24. Support  Many books, very big community and tutorials    Two 'manual' books, smaller but dedicated  community    
  25. 25.   Thank for watching! Questions? http://jon.is.emotionull.com jon@emotionull.com    

×