Few months back I had a new project and I was at crossroad on which framework to choose for the project. As usual, I searched online and found few blogs on the comparison between frameworks. Which one is hot, which is not? Which framework is more flexible? Which one has the lesser learning curve and so on. Finally it all boiled down to two – Ruby on Rails (ROR) or Django. Through this blog I am comparing these two frameworks. I have taken few parameters under the scanner and I hope you find this informative.
For those looking to enter the world of web development, the choice of framework can be an important technical decision. If you are looking to expand your skill set, it will be good to know that both frameworks are powerful and quite enjoyable to use. Both Rails and Django are very accessible frameworks, and easy to get started.
The first major difference between these frameworks are, Django is written in Python and Rails in Ruby language. Both frameworks are MVC frameworks and emphasizes on code re-usability and portability. Both frameworks are also free, open source projects.
Comparison of the programming language:
Python the eldest of the two programming language was designed to enhance productivity and better readable code. On the other hand, Ruby was designed on the basic principal of making programming easy and flexible.
Python has influence from other programming languages like: C, C++, JAVA, PERL etc
Ruby has its influence from C++, PERL, CLU, PYTHON etc.
In terms of ease of learning Python, has an edge over Ruby due to its better code readability and syntax and the fact that it is simple to understand. It would be an easy pick for beginners for getting started.
Taking usability as the factor of comparison, Ruby has the edge over python with its elegant and expressive syntax. Ruby would be preferable to those who are already familiar to the nuances of programming.
The demand of Ruby in the market is higher than Python. Even though learning Ruby is tough, it has better usability of the two.
Ruby is a more object oriented language compared to python. The main advantage of using Ruby is the gems libraries. There is a huge inventory available gems that make every task easy. Programmers need to be least worried about the basic functionality of web development like CRUD (create, retrieve, update and delete) operations and can focus of the major business logic.
Both frameworks are open source, and use the model–view–controller (MVC) architectural pattern to simplify the creation of web applications. These frameworks have also risen in popularity, particularly with start-ups.
Rails focus on allowing programmers on the major business logic and design rather than the language fundamentals and syntaxes aspects of web development, this makes Rails more programmer friendly.
Django on the contrary, focuses on the coding fundamentals. Programmers who are looking to take control of the coding process would prefer Django. Also, Django can be stated as beginner friendly because they would be looking to get their grip around the fundamentals of the language.
In a Linux distribution for installing Django, Create a virtualenv and then run the command to pip install -e Django to get Django installed. It normally takes less than a minute to complete the installation.
On the other hand, for installing Ruby, the process is little longer. To start with, you have to understand what a bundle and gem actually is (both used to install the packages for ruby). Both bundle and gem needs to be installed, then run the command gem install Rails to install the latest version of Rails. The installation process lasts close to half an hour.
Rails use a lot of name conventions, often it gets hard to track the changes. Rails naming convention is linguistic:
- Model names are singular,
- Controller name is plural,
- Database table names are plural (snake_case) ex: user_role.
- View directory name is plural.
Django models are just Python classes, so the Python naming conventions detailed in PEP-8 are applied. Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged.
Within both frameworks, templating is a core feature. In Rails, the base template is called a layout while the individual page templates are views. With Django both base template and individual pages are plain templates. To render dynamic content, both framework function differently. Django uses a simple templating language so that web designers with HTML skills but minimal programming knowledge can build templates. In contrast, in Rails views uses in-line Ruby code fragments. Developers may therefore include complex functionality within their views. In short, Rails views appear more complex than the Django templates.
Rails is extremely versatile and have a very strong community around the web development framework. It has a large pool of core developers, plugins developers, conferences, books and great open-source libraries which help speed up development process.
For the reason that the framework is so extensive, it would require quite an effort to do custom changes for anything that is outside the framework’s scope. A lot of developers find the framework conventions quite annoying and bypass the framework altogether.
Django, in most cases, is highly criticized for its inactive or rather dead community support. Django have very little online forums and any that are available most of the Django community exists in mailing lists and user groups.
Performance, Security & Speed:
Both the framework stand head to head in all the three criteria. In terms of security Django is supported with middlewares and Rails has the support of active records. Also, both frameworks provides Cross-Site Request Forgery (CSRF) tokens for forms. When closely examining the frameworks Django has the upper hand in terms of security and speed.
Django documentation on security (https://docs.Djangoproject.com/en/1.8/topics/security/)
Rails documentation on security (http://guides.rubyonRails.org/security.html)
Even though both frameworks are pretty heavyweight, they both are designed with scaling in mind.
We can clearly see that both Rails and Django offer roughly the same MVC frameworks. Rails is comparatively the bigger and older framework also the learning is bigger compared to Django. Rails has better community support. Django even though the smaller community it is supportive and you can get plenty of information online and the documentation is sufficient to answer your queries. For beginners, Django will be a great starting point.
When it comes to deciding which to learn, your personal preferences as well as the application scope are the most important factors to consider which framework to go with.
My pick is Ruby on Rails. Drop in your selection as comments.