Web development platform selection

Analysis and selection of tools for this project.

Python language

The Python language will be used because it:

  • is multi-platform (comes pre-installed in most Linux/Unix/OSX distributions, and is well supported on Windows)
  • has strong support for Web and SOA development
  • has strong support for automated testing
  • is the language of the ISIS-NBP project, so Bireme has a strategic interest in it

Framework

Given the choice of Python, the next step is to choose whether the CRTP project should use a mainstream Web framework, or develop it's own.

For this analysis, we will take Django as stable, full-stack Python Web framework. A different full-stack framework could be substituted, without significantly affecting the analysis.

feature benefit Django support In-house framework support
User management creation/edition of users, roles and permissions built-in API with high-quality UI depends on component integration
Automated form validation improved UI with less code yes depends on component integration
Documentation enables contribution and customization from outside parties plentiful, online and in books depends on component documentation;
integration must be documented in-house
Object-relational mapper uniform, vendor-independent database access yes (MySQL, PostgreSQL, Oracle) depends on ORM integration
Flexible architecture adaptation to future, unforeseen needs yes, by replacing components yes, by replacing components
Platform Evolution enhancements, new features and
support for new technologies
contributions from a large,
active developer community under proven leadership
depends on components;
architecture must evolve from in-house efforts
Caching reduced server load and increased performance built-in, extensible support for view, method and query caches depends on component integration
Internationalization support for localized UI elements built-in depends on component integration
Deployment installation for production use few external dependencies (usually 3) each component potentially has external dependencies
Automated testing increased release quality and
lower risk from changing requirements
yes, including database fixtures depends on component integration
Schema Evolution schema changes automatically
executed in production databases
depends on component integration depends on component integration
Content Syndication updates and new items broadcast to subscribers built-in RSS and ATOM protocol support depends on component integration