D10X has worked with multiple projects and own products based on Django web framework. Based on our experiences, we realized that typically medium to large scale Django projects commonly require the following functionality.

  1. Simplified settings and a way to read the settings from configuration
    1. Separation of Configuration for dev, testing, staging and production
    2. Configuration logging for different (Especially things like email logs for crashes in staging and production environments)
    3. Simplifying Django     deployments and generation web server configuration files.
  2. A curated list of opensource third-party Django applications for fast UI development (e.g. Django-crispy forms, Django Slippers, Django-tables2 and Django-filters)
  3. Custom UI template components developed on top of Django-slippers based on Twitter Bootstrap javascript CSS framework.
  4. Dynamic HTML generation/loading with minimal javascript
  5. Common security configurations and addressing security
  6. Separation of Users and User Profiles. By default, Django does not have this separation. It adds everything in Django User
  7. Roles and permissions
  8. File uploads and attachment handling (including encrypted file storage, ability to validate that files are not tampered etc)
  9. Email notifications with support for storing email templates in database and modifying email templates at runtime. Ability to add new types of notifications (e.g. whatsapp, SMS, FB messenger etc) as plugins.
  10. Scheduled tasks and way to track the status of scheduled tasks.
    1. Integration with cron.
    2. An easy way to add new scheduled tasks without adding cron files.
  11. Multi tenancy support
  12. Workflow framework (integrated wirth auth, permission and easy UI development)

D10X has developed reusable components, utilities, common base classes etc over Django and curated 3rd party Django frameworks. D10X objective was two fold.

  1. Reduce the bootstrap time for new projects. Our rough estimate is use of DXDJ reduces about 1 person years of efforts in bootstrapping a new projects.
  2. DXDJ also improves the daily productivity of developers by (a) reducing the boiler plate (b) simplifying and improving the reliability of deployments (c) improving the security The end result is number of bugs and security issues are reduced there by increasing the productivity of a typical Django developer.