When you write web applications, there are many features you'll need which mirror features other people have needed too. Now - there's nothing to stop you writing your own code (maybe in Ruby, Python or Perl) including these features ... but wouldn't it be better to use the feature set that someone else has already written?

A web framework is both the upper layer - the hanger - on which you can hang the code that does differ for your application, and the lower layer - routines that you call to perform common fucntions. Very often, web frameworks use standard classes of objects too, so that you can say "I want one of THOSE, but it has the following differences / extras".
Where the base language is Ruby, the usual framework you'll find is Rails. For Python, Django is very much the most popular at present. With Perl, there are a number - Catalyst, Dancer, Mason, Solstice and Mojolicious for example. For more, see
[here] on Wikipedia. PHP is slightly different - but only slightly so - in that a few more of the elements (such as the session handling stuff) is built into the base programming language. The biggest name with PHP is the Zend Framework.
So - what might you find in a Framework?
• A Scaffolding into which you can build your application
• Form helpers
• A model system (in most of them) to let you hold and manipulate databases and easily convert them to and from objects
• Session handlers (in base langauge with PHP)
• Templating systems
• Easy support for model - view - controller architecture
• A Utility application to let you admin / update databases via the web
• Router to map URLs to particular controller / action logic.
We'll introduce you to
Django or to
Rails at the end of your Python or Ruby course. With Perl, where there's no single market leader, please ask and we can work through a framework with you.
Illustration from last week's PHP course - yes, I've been playing with colour. The coathanger is a historic one, currently on display in
the museum (written 2012-11-10, updated 2012-11-17)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Q915 - Object Orientation and General technical topics - Principles of Model - View - Controller [4691] Real life PHP application using our course training MVC example - (2016-06-05)
[4641] Using an MVC structure - even without a formal framework - (2016-02-07)
[4527] Hello Flask world / Python web micro framework - (2015-10-11)
[4391] Refactoring Perl applications to give them a rosy future - (2015-01-11)
[4320] An example of Model-View-Controller techniques in a Perl / CGI script - (2014-11-20)
[4114] Teaching CodeIgniter - MVC and PHP - (2013-06-12)
[4066] MVC and Frameworks - a lesson from first principles in PHP - (2013-04-19)
[4010] Really Simple Rails - (2013-02-17)
[3705] Django Training Courses - UK - (2012-04-23)
[3624] Why do we need a Model, View, Controller architecture? - (2012-02-25)
[3454] Your PHP website - how to factor and refactor to reduce growing pains - (2011-09-24)
[3237] Using functions to keep look and feel apart from calculations - simple C example - (2011-04-09)
[2612] The Model, View, Controller architecture (MVC) - what, why and how. - (2010-02-01)
[2199] Improving the structure of your early PHP programs - (2009-05-25)
[687] Presentation, Business and Persistence layers in Perl and PHP - (2006-04-17)
R202 - Ruby on Rails [4013] Web Frameworks - nested templates - (2013-02-22)
[3780] Ruby of Rails - cleanly displaying model data in the view - (2012-06-23)
[3779] Adding validation to form entries and sticky fields - Ruby on Rails - (2012-06-23)
[3778] Providing a form to allow the user to add data to the model - Ruby on Rails - (2012-06-23)
[3777] Multiple views in a single appication - sharing common parts of the template - Ruby on Rails - (2012-06-23)
[3772] Hello World - Ruby on Rails - a checklist of each step - (2012-06-22)
[3756] Ruby on Rails - how it flows, and where the files go - (2012-06-08)
[2609] Scope of variables - important to Ruby on Rails - (2010-01-31)
[2607] Answers on Ruby on Rails - (2010-01-30)
[2605] Ruby on Rails - a sample application to teach you how - (2010-01-30)
[1745] Moodle, Drupal, Django (and Rails) - (2008-08-08)
[1375] Python v Ruby - (2007-10-02)
[1302] Ruby, Ruby, Ruby. Rails, Rails, Rails. - (2007-08-13)
[1050] The HTML++ Metalanguage - (2007-01-22)
Y306 - Python - The Django web framework [4095] Django - first steps - Updated - (2013-05-19)
[3698] How to stop forms on other sites submitting to your scripts - (2012-04-15)
[3640] Sessions (Shopping Carts) in Django - the Python Web Framework - (2012-03-05)
[3639] Demonstration of a form using Django - (2012-03-04)
[3634] Defining database relations in your Django model - (2012-03-02)
[3633] Nesting Templates in Django - (2012-03-02)
[3140] Django - separating the HTML from the view / model - (2011-01-20)
[3139] Steering our Python courses towards wxPython, SQLite and Django - (2011-01-19)
[3138] Django - adding your own views, and then templating your views. - (2011-01-18)
[3136] A framework with python - Django - first steps - (2011-01-17)
Some other Articles
35 minutes is only a slight delay on our railway serviceTwerp - A person regarded as insignificant and contemptibleOn rememberance, on war, and on preventing the war cycleChallenge for a photographerWhat is a web framework?Multiple page web applications - maintaining state - PHPBODMAS - the order a computer evaluates arithmetic expressionsPHP variables - dynamically typed. What does that mean?How does PHP work? While, for, foreach or something else to loop.