You are on page 1of 10

,

9 : 

A Rails/Django Comparison
@ - Q 1 

Abstract
77 3(7 (4#  ! ##! #  " 7& 7 

##&   
     #        !     ! 
 &    
   
  #  /!#
#!   # #  " ., & 
 & !!  ! #!. ! ## &
& !  
 !    #  "   7 7  > 7   /!
#  !   

 
 &
#  #      # #  "

, & 
#   #  " #     #!
 
  #  "   /


1 Introduction
5 $
5O5O"
(  $
 ((  (
-
5 $ "# 
"5 $

(( #   
" "    
( 
        

  
" # 
  
  $
"
(   

  9 
  
 
  (  
(   $  "
(    (
-  
 
 !  

$# #
$   ""(


 (( # "
"#
$ 



   



 (
-"

5 $
5 

%         


 "
       
 

 
 
    
  (
-  
  
 
"
(   A
    
 
   
( 
#     
  
      
 
   (  $
 
     (( "   4 
  $  @    5#   " 
  $      9 
 %
(( 
  
( "#$
?  $
"7 "(( 
(# "
(
? (  <(  O
O
B%&;(    

%  


  (
$  
"
  

 $ 5 "9 



     
  <( "        %    "     "  $
    
( #  (   

"
(            
" 
  
( #   "  $ 
   "    
   "

(
  

%

"
$
9 
 "5 
 $  $ 
 


40
 (  $ 

1.1 Specification Overview


%( 
 
(( " ("OB$ 5"  O! 

$ $ 
$
$

- "   $#
  
   $(($  " $

-# "
 
((   
    "  $

- %   


 
 
 $

-     #   "   


 
(

((7



  
# 

"
" B%&;


 
 

   $   %$ B%&; " 
  (
""   

 ( $ " 
2- "[2!I;'L] 

%B$ 5"   


 ?   


"  " 
""#   "
"$

-# " # " 



  

  "  "$

- " !"





3,
     

, 9 : 

 

- "
O"( O 

1.2 Habitual Readers Implementation


6"
"
 

 #
 ($# 
" ( 
 "
( 
- 6  " 

 $ (
-O="5O
5 $ "O2L -O

9 

  #+,,)


  (( 

 
#@  " "
<(?  <  
 5 "9 
@ "$ 
-  5 $ "5 $
5
 ($
<(
 
@ "
$ "
   
"$$ -"
  
(      
 "

(

 (9 
<  #
"$ "
 $ 

  

 (
- +,,0# " 
    /CC>


 

(( 
#
"

  

(  
4

/ %9 
(( 
  " < OO "
 '5; %$
 
$
  "
  9 
"(  


2 Quantitative Comparison
6 
( "    
  
 (( 
     

    ( 4    
 
"   "
(( 
( %?  (    "
 
( 
( 
? 
( 
$


2.1 Lines of Code


! 
"  
#  ""
   



 "  
" 5 "
9 
  
 
     5 $

 "
 
?  "
(
" 6""
  "
 
 
 "5 $; 

" 
( "     "    6   O

O  

  [6B==;=5]#     
  $ -      "

((  B%&; 
 
" "$  O O
(( "
 (( 

( 

,  :
,&*9*
&
"
" *0 //)
2

 
" +,0 /,C
B%&;B %( 3) +)
 (& 
//*
&;"
"  +) )C
   
0/
5 $
 $
 3/> 0+,
%( +C> 8,)
  IDJ K1A


(   ( (( 
  #9 
 

 
 "  

"
 5 
%"  
"$   "
(( "&;"

"  9 
(( 
#&;"
" 
"

+,U
 

"
 9 
 
&;O
 & - ;  O#  <
  



     
3/
, 9 : 

  " [&;]

% 
 "    ($ 
 
(
" %9 
(
 "
 (  5(# 
5(
("( 
9 
("

 

2.2 Implementation Time


% 
 
""(

-
(( B$ 5"  
#  
  "      $  $
  6    
""  (      
 ( 4  (    
   5
(( 
#( 
9 
(( 
# "( 
-$ $

9  
( ( " "
 "( 

 ,  : &


! B%&;

 840,

%" /40)

9   ,4/3 ,4//
&
" /40, ,4,C
B
( 04,, /48,
@  34,, +4,*
"(  *4+3 ,43>
(7
    /4,, +4/*

" 
" /40)
%#  "" /40, /40/

%
 +,48, /,40, )4,)
%
  " J
((
(K +)48) /)40)

!         


  
 ((      
   9 
   
 @  
 ((   
 
 5 %$ -
"    $ $ "
< 
 ?  "
(( 
"(  
 
 5 


<(  "
 =<  " 
"( # "
 
 
  $ 
- 
(  "<  
 
"
 #(( 
( 
<(? 

3 Qualitative Comparison
% 

(  

 $ 
5 "9 


3.1 HTML Templating


B%&;( 
 
$
5 "9 
@

(
$
(
"
$
(" 
 

#  "" ("   

 
 ! 5#$( "O
O "" ( 
OO ! 9 
#$
  ( 

%-"  $  (


- ($"" ( 
  5  

3+
     

, 9 : 

 5 $
" ( # "( 

  $  
(< 
 5

"
   
 $           
"            

 
 (
" 
"#   " 
    
    
   9 
#  
 #     (  ( 
   
"      
   $  "      B%&;  -  $   ( (  
 (( 
-
"  $ "( 

A
<(#
( 
B$ 5" #  
"
 -
#7"
" " 

  
 %5 
  

("$ "
(-$
 % 

  " 4

/01    123,4302


%  
5 $ # ( 
# 
 " P
  %

 4

/52, /-52
/ 16,62
/01    123,37 128,02
/- 2
%  "    

  # $ "

 
$9  

 
 (" %
 
   4

/01.4,9 :7,4 ;,9 :<7 1264=>,9  4:?602


% 5 $  

   -
#  
  

@
 #


9 
(  
 4

/52, /-52
/ 16,62
>0 ,,0?
/164>>,  4??6
 16>>,,4 4 ??62>>,??/-2
>0 0?
/- 2
%5 (

(< 9 
(# " B%&;(
  
 
"
   %" 
5
 
"
 

   ( ( 

"#        
 " 
  

(
"# 
( 
 B$ 5"  5"
 

 #

 #
 "
 

"   "  
9 
("(
 " 


 <(4

   


  
  ! "  #!$%&$ '

 

%(
< 
 - $9 

" "( 
 
$"  
 
$ -
" 
 "
( [5A%]

3.2 Schema Generation and Evolution


&
"
$9     
 $
5 "9 
#
 -"  
   
(( 
5

" 
 (
 
# 9 
"

 


     
30
, 9 : 

3.2.1 Defining Model Classes


5((   
" [A6;=5#&]"  %
" (
"
"
 "   
( 5
"$  " 5
""" (
"
 $ 
($ "$(  
  ( %"
   (
"
( #$   
" "

"5   
- (
" 

( ( ( 

9 
#

  "# ?  "
 
<  

  #$ 
 
 $  9 
 " "


  "$ (
(  
(
"" 


  (
"    
(    B$   5"    
        <(  !   
  
5"  
  
" 

  "  "$

- 9 

"< "  
 $ 
(
"#  " ("   
"  "  "$$4

@,A;(<
  1B ,C
;@ <
 .1B ,C
;!.741)DC"'7
441+<
1'B; 1 <
 ,41BB; 1 7E4,1F7
4 1G7 .1 <
1EB;E,1GHHH7 .1 <
%  9 
 (
"  
   "    (  (
 
  ("  "  
            
 
(   ""( #  < "$
 

@
 #5 
( ( !" 
 
$  "
 (
" 

 $ 
(
" $

- "#



-
 "# """


 """ 5<( $" 
 (4

@,/)@  !
 ,4 .
 ,4 

! 
(  
#5 ( 
 # "
$ (
"
 $  
"
( "  " 
9 
#

  "# ?  "
 
"   (
"#  "  $   " 
%
 <(
5

 

 < 9 
 
 
 

3.2.2 Evolving Model Classes


69 
 
  "$ (
((
"" 
#"


"
"
   

(
" 
#O
 O(
"" 
   " 
"  "$$ %5( 
(  (""    "
 (
" 
 " "   (#   " 

( 
5 $ " ""
#(
" 
# ""

"$ ( 

#"
   
 
"
$( "
(
" 

 (

  
= ( 
  " 
 ($ # "  
 (  $

"$ - " "
 "$  "   ( 
 
 ?   

B ( 
 " 5B$ 5"  

 5" $4

D @,/)@  (, 



 4  ,II

38
     

, 9 : 

6 .467 ,


6  467 ,
64 67 
6 ,467 ,
667 E



  4  ,


%(
" 
-"
( 
! $ ("  # 

 (  %"
 (
" 
-"
  ( 
  "
    
$ !  "  " ( 
#(
 


 
( 
 
(
" 

 (   6 5 
<  #(
" 
""$ (
" ( " (  $  ( 

%  


-" 
5 ( ( 

( "9 
A #5
"
 " "(  (
"
   
 "  
" 
(   
" A
<(#"$
 (   "
(  
  #
(  5
( 
 
"  ?  "
(
"
(
"  
 ( 
 
  
 ( %
 
(( 
 
 9 
#"
 
" "
  "
:;
  

%  
"  "     #  $    
"  $ -#  ( 
  
       (
 

< ( 
(
"  ""$ (   
(< ( 
(
"

$ 9 
# (
"
"- " 

"

#$ "

  "
   #    (  (
?  -
" " 

    ( 
    #    9 
 "
(  
((     
-   
 "   
"       (

 
(  ( 

3.3 Automatically Generated Admin Pages


& $ 

(- "
O"( O# "$( ($ 
 "  #
 
  
 
 $ 
"  " #
(      $ 

   
"  $ 5 "9 
9 
 
(   ""( # 
           



  "
(   (  A
 <(      B$   5" 
(( 
#"
( 
"(  5

-+CU
"
( (#
( "

)U
9 


6  9 


"(  O 
(   "O#( 9 
  
(
( 
("
 %"
  $""  $  "
 ( 
9 
(
"  " " $ ""#
  
?  - "  "  $ "  
 
 %
   
(

- "
#"
 (
"9 
 (

5 



((  "(     $"
" 
"  $  

     " 
 
  %   ($ 
5  (
(
"9 
"(  
%
     
"( ['%&!L] " ( "
[%5=&;!L=]#$
  
"
(  
   5  
 
9 
   ""  
  - 
     
        $
 
((    
9     ?     
"(      


     
33
, 9 : 

3.4 Internationalisation

    "" 
  ""     

     B$  5"    
#        
"
( " "( " "  $
5 "9 

((  

!    #
(5 $
$  #
<(  #   
"  %( 
  
 
   "
 
< " 
- 
 < 
%5
("" "
$($(  ( $P
P   5
  
(
"   
44& $[5!;&';%!@%=] % 



/ +#5 (
-< "
$( 5 $
$  
(-( 
" 


"' 
" 
 "1L'<[1=%%=D%]  

  
/ )#
     "    +,,,  %  9 
  (
-  $ " 
      " ""  (  (  

  
 9 
 
 "
  

 "" B%% ?  

3.5 Integrating 3rd Party Code


5 "9 
   -" 
 


 < 
  % 5 
O  O "9 
 O 
O %- "
< 
    "

    (
-  %  
"     "     $         5 $ 
 
#  $       
  "
"
    (
-

5   " 


 


"  $  "" 5 
%B$ 
5" 5(( 


-" 
 PP$  

" 

 
$

-#   "     PP (      


  
  
"     "  (   "  7     
 
( $ ($ 
   
(
  #8/C5   $

"
 
"
(4 $"
( 
(

9 
 
  $ " (  ( 
5   9 
($
(
"

  
  
  (
 (
"
"#(# (  "  

$   % 
 

 (  
""
 


"   
((  ""(  (
  # 
    



  $# "  




5 "9 
   "  
 $  $     5 $ "

#     A
 <(#      B$   5"    
#  $
    5   "  9 

(( 

((  (7
  " $  

3.6 AJAX
6  5
9 
(( 

B$ 5"  


-" 

ED#$
(
   $ 

( 
  

5  " ($ 


  
 "  " 
" 
D(B5?  
' 5E#5"
    ( 
"
 ? $   E 
$ $ -  

$9  "< " $
  

 "  
 
(
" $
 

(
E $  
$ " 5E( %
 - 
E $  5"

   ""
 
( 

 

-

 E $  

! 
 #9 
  "
EL(
" # E 
" " 
 
E 
$  # #
"
 %9 

(    
9 
 9 

"
 #
 # " "
"  5
 
 
  
"

3)
     

, 9 : 

E $   "


"  


3.7 Other considerations


! ""
#

 #
    ($

 
"
  

 $ 

 (
- 

3.7.1 Maturity
@
 (
- <  "
($ 
 "
" +,,0+,,8 
" 5
 "
 $  E +,,8# "9 
 E +,,3  #5""  
 
(( 
 $ 

 (
- "  "(
/ ,   ($ +,,3 
%   
9 
, C3# " ($    
9 
!$
/ ,
(
   "[EL1!] %    /+
((($ 

((

5 

[5!;5=]# "8
9 
 

[EL15=] 

3.7.2 Market Position and Hype


 
9
$E
$ [E@=52=] "-[==I]
5    9
$ ?  ( 
(
 
    9 
     

  )4/#    
 
    (
 
    5 $      



<(84/

6
   "( " 5 $#5 (
-(
 ($"
 ( -  9 

( "
E "E+==#5 "9 
 $

 

(
     ( -  

( 
( 
    $  ("     

       1

  @  [11;=@%%;=]#  !   5


-
[!=5I=%]# "% 
[%=BL5%!] 5
 
(


 
-

3.7.3 Tools and Utilities


@
 (
-  "
( 
 " 
( - 
 ( 
# "<     5-" 
5-#5 $$ "  

 
( -

 
     "
(   

      $  "


"  
  
(     "
(  
  5
 
 !< 
(( "
 (
  
 
(-   - 



"

 

#  ( 
# "
" "  !      
"
 
( 
" 
    < 
(( "
(      
 
 


9 
#
 
$  "$
 
"

5
 
#
 (
 

" $ "
"
9 
 


4 Conclusion
9 
 "5(

( 
$(# ( (  #  (     % 

       $   
   <  "  5  "
(   (  
    
 9 

   9 

"
( (  
5 A
"
 
  
-  9 

5#
(
(
 
" 
(( 
   5 $"
 
"$ 
(  
5#
"
 
"$ 
(  9 
#
 (
- "



     
3>
, 9 : 

A
"
 
-
  
$
  #O$O (
-" "
"
( 
 
(    "   
   
 %  

   $   ((   
         
 "  4

(
 ,  :
   
 !  " (
-
 (
& ( 
   
 

.   
( 
 5/ + 
( 
 

$# 
 " 
 (  * B 
$  
&      # 
( 

  *  
"$
((   
(  (


 "  


$#$ 
"   

2 
  $ ""5 5E (
-

    $  
(  
(    
  =<  

6 

 $ 
 (
-($" #

"   (


-


" 
 ( 
"
$ 


5 References
/ ['%&!L]4
"  $<  
"( 
+ [5A%]4+ 9

(+,,)(,+"9 


 (( 
0 [EL1!]4 "9 

9 
("
( 
P$
8 [EL15=]4 "9 

9 
("
( 
?V
$ "
3 [A6;=5]55 #"A
 
) [A6;=5#&] 
=    
   #&  A

> [1=%%=D%]4 

 <
* [11;=@%%;=]4 

$
(
C [!=5I=%]4  
-
(
/, [E@=52=]4 9
$ 
(  
// [&HL]4 9



9 (7

/+ [5!;5=]4 $



/0 [5!;&';%!@%=]        
"   (  
4 
(
9 ( $P
P -' 
" (
/8 [5=]4  $



  (


/3 [5'@&HL]4 $
 $ $(7
(
/) [==I]4 -
(  
/> [%5=&;!L=]4 ( "  
(
/* [%11@;=]4- $

  %$  B


/C [%=BL5%!]4  

(
+, [2!I;'L]4 " - "
((

3*
     

, 9 : 

+/ [6B==;=5]" 6 





 4 "
(


++ [&;]
 & - ;   4 (


%
-  " "  
((
 $ 
L

((  -+ 3;   %

   
 
      #    4 
((

  $ + 3 
  "      

   
((
#  380  B
 "   #  3  A

#    A  
#  
#  C8/,3#  '


     
3C