I frequent the /r/django and /r/djangolearning subreddits, and a couple common questions come up regularly:
- Which type of views, Class-Based Views (CBV) or Function-Based Views (FBV) should I be using?
- Once I have completed the Official Django Tutorial, what are some example django projects that I can learn from?
I worked on a little project this evening which will hopefully answer both of these questions, and provide some insight into modern django projects.
Background and Process
You can skip this section if you're in a hurry and just want the good stuff
In order to identify the most popular, up-to-date opensource django projects on GitHub, I began by performing a somewhat arbitrary API search of repositories using the following parameters:
- contains the word "django" in name, description, or readme
- repo language of python
- 25+ stars
- last pushed at least 2019-01-01 (this is pushes to any branch in the repo)
- no private repos
- no archived repos
- total repo size of at least 500 kB
The resulting API URL is: https://api.github.com/search/repositories?page=1&q=django+in:name,description,readme+language:python+stars:>=25+pushed:>=2019-01-01+is:public+archived:false+size:>=500
Note: This search was conducted on 10 October 2019, so results may have changed since that date
The result of this query at the time that I ran it was exactly 1,000 repos, which conveniently happens to be the largest number of results you can actually process through the api. You can build a query that finds more than 1,000 results, but you can't view the info about more than 1,000 repos.
The "last_pushed" value is not particularly accurate for a project like this. Some projects use bots to keep requirements files updated, but the project at large hasn't been updated in years. To mitigate this issue, I used BeautifulSoup to check the repo's actual html page for the date last modified and removed any that were not in 2019. This is not an efficient process, but it worked.
For each resulting repo, I also performed a search to see if the repository contained a views.py or models.py file. If not, it was discarded from the list. I felt this was a decent way of filtering out repos that likely contained no actual django-related code. Possibility exists for false-positives and false-negatives, but it's better than no filtering at all.
I deleted django and django_rest_framework, because I felt they were somewhat outside of the scope of this project. I manually went through the resulting repos and deleted those which did not fit the intent of this project. For instance, repos with projects entirely in a language other than English, repos that clearly don't follow best practices, etc.
I also manually went through all remaining repos (450+) and removed any that weren't "projects". This included apps and tools meant to be instaled in a django project, tutorials, etc. I considered "projects" to be anything from company websites to complex web apps. These repos are generally either standalone projects or part of a larger project.
Last, I looked at the django version supported. I removed any repos that didn't support at least Django 1.10 (only a couple are 1.10. The remainder are 1.11 or above)
The final number of repos in my list was 130.
The remainder of this post is about the final remaining 130 django projects that are recently updated, at least somewhat popular, and somewhat substantial in size.
View Types
To get an idea of what views were in each project, I performed a regex match assuming the string "views" would be somewhere in the filepath (either a folder or in the file name), and that the string "tests" would not (I don't want test views). Here are the patterns I ended up with for identifying CBV and FBV:
patterns = ["^class\s.*View.*[)][:]$", "^def\s.*request.*[)][:]$"]
It seems to have worked pretty well. For the 130 repositories, 9,381 total views were identified.
Now for the interesting part - frequency of each type:
- FBV: 50.26% (4,715 total)
- CBV: 49.74% (4,666 total)
I think we can pretty definitely say that the decision of whether to use FBV or CBV is entirely up to what you are comfortable with and what makes sense in terms of flexibility and the DRY principle.
It's 50/50, so don't feel bad if you aren't using CBVs.
23 of the projects used only FBVs, 15 projects used only CBV, and 4 projects did not contain views. The remaining 88 projects used some combination of the two type of views.
The Projects
Here are the 130 django projects, sorted by number of repository commits. You may have to scroll right to view additional stats.
Project | Description | Days since last push | Repo age In years | Views Total | FBVs | CBVs | Models | Stars | Forks | Commits |
---|---|---|---|---|---|---|---|---|---|---|
addons-server | 🕶 addons.mozilla.org Django app and API 🎉 | 2 | 5 | 181 | 151 | 30 | 89 | 597 | 405 | 44690 |
cfgov-refresh | Django project protecting American consumers | 2 | 5 | 44 | 24 | 20 | 108 | 118 | 80 | 17453 |
pootle | Online translation tool | 183 | 7 | 91 | 40 | 51 | 36 | 1212 | 269 | 16308 |
horizon | OpenStack Dashboard (Horizon) | 2 | 7 | 754 | 400 | 354 | 0 | 1118 | 1141 | 15353 |
geonode | GeoNode is an open source platform that facilitates the creation, sharing, and collaborative use of geospatial data. | 2 | 9 | 164 | 130 | 34 | 58 | 803 | 740 | 14096 |
hydroshare | HydroShare is a collaborative website for better access to data and models in the hydrologic sciences. | 3 | 5 | 180 | 137 | 43 | 198 | 91 | 20 | 12062 |
onadata | Collect, Analyze and Share | 5 | 6 | 107 | 98 | 9 | 33 | 150 | 112 | 10192 |
usaspending-api | An RESTful API for U.S. federal spending data. | 2 | 3 | 160 | 30 | 130 | 72 | 115 | 44 | 10114 |
reviewboard | An extensible and friendly code review tool for projects and companies of all sizes. | 10 | 10 | 58 | 43 | 15 | 33 | 1228 | 364 | 9548 |
wagtail | A Django content management system focused on flexibility and user experience | 2 | 5 | 155 | 113 | 42 | 38 | 7938 | 1728 | 9364 |
site | A modern open-source online judge frontend. | 6 | 5 | 122 | 44 | 78 | 36 | 147 | 86 | 8888 |
aristotle-metadata-registry | Aristotle-MDR is an open-source metadata registry as laid out by the requirements of the ISO/IEC 11179 specification. | 1 | 5 | 265 | 38 | 227 | 89 | 69 | 55 | 8107 |
onlineweb4 | Web pages for Online, Linjeforeningen for Informatikk at NTNU | 2 | 7 | 233 | 133 | 100 | 77 | 36 | 13 | 7958 |
kitsune | Platform for Mozilla Support | 5 | 9 | 261 | 233 | 28 | 71 | 525 | 511 | 7314 |
djattendance | A rewrite of the original attendance project in Python | 9 | 6 | 369 | 92 | 277 | 118 | 30 | 21 | 6649 |
ion | TJ Intranet 3 (Ion) | 1 | 5 | 236 | 209 | 27 | 55 | 50 | 31 | 6156 |
evennia | Python MUD/MUX/MUSH/MU* development system | 10 | 5 | 25 | 4 | 21 | 13 | 987 | 439 | 5895 |
mytardis | MyTardis - a data management system for private lab/facility data | 2 | 7 | 102 | 98 | 4 | 38 | 64 | 59 | 5799 |
shuup | E-Commerce Platform | 3 | 4 | 296 | 41 | 255 | 146 | 1019 | 537 | 5684 |
seed | Standard Energy Efficiency Data (SEED) Platform™ is a web-based application that helps organizations easily manage data on the energy performance of large groups of buildings. | 8 | 4 | 66 | 27 | 39 | 43 | 61 | 43 | 5513 |
otm-core | OpenTreeMap is a collaborative platform for crowdsourced tree inventory, ecosystem services calculations, urban forestry analysis, and community engagement. | 96 | 6 | 161 | 158 | 3 | 38 | 129 | 68 | 5176 |
Misago | Misago is fully featured modern forum application that is fast, scalable and responsive. | 6 | 7 | 261 | 139 | 122 | 53 | 1723 | 369 | 5143 |
iati.cloud | IATI.cloud extracts all published IATI XML files from the IATI Registry and stores them in a PostgreSQL database, that you can access using a RESTful API. | 2 | 6 | 171 | 20 | 151 | 193 | 27 | 24 | 4701 |
refinebio | Refine.bio harmonizes petabytes of publicly available biological data into ready-to-use datasets for cancer researchers and AI/ML scientists. | 2 | 2 | 26 | 1 | 25 | 31 | 74 | 7 | 4038 |
feincms | A Django-based CMS with a focus on extensibility and concise code | 67 | 10 | 1 | 0 | 1 | 17 | 765 | 227 | 3892 |
taiga-back | Agile project management platform. Built on top of Django and AngularJS | 12 | 6 | 91 | 6 | 85 | 61 | 4963 | 966 | 3778 |
badgr-server | Open Badge issuing and management with Django | 3 | 4 | 88 | 9 | 79 | 42 | 134 | 71 | 3640 |
netbox | IP address management (IPAM) and data center infrastructure management (DCIM) tool. | 2 | 3 | 486 | 5 | 481 | 77 | 5709 | 1091 | 3534 |
amy | A web-based workshop administration application built using Django. | 8 | 4 | 124 | 56 | 68 | 35 | 52 | 49 | 3495 |
modoboa | Mail hosting made simple | 95 | 6 | 51 | 43 | 8 | 20 | 1374 | 214 | 3327 |
Kiwi | the leading open source test case management system | 3 | 2 | 36 | 10 | 26 | 28 | 330 | 125 | 3230 |
EvaP | a university course evaluation system written in Python using Django | 63 | 7 | 93 | 93 | 0 | 20 | 51 | 82 | 3199 |
Inboxen | Main repo for Inboxen.org | 3 | 5 | 53 | 23 | 30 | 24 | 143 | 11 | 3105 |
capstone | CAP database scripts. | 2 | 2 | 59 | 48 | 11 | 73 | 89 | 18 | 2978 |
dissemin | Spot your own paywalled papers. Liberate them in one click. | 2 | 5 | 36 | 18 | 18 | 32 | 142 | 18 | 2942 |
ej-server | EJ uses gamification and machine learning to promote discussions and participation in a virtual democracy | 33 | 1 | 11 | 9 | 2 | 28 | 33 | 16 | 2890 |
djangopackages | Django Packages is a directory of reusable apps, sites, tools, and more for your Django projects. | 20 | 8 | 69 | 55 | 14 | 15 | 400 | 119 | 2792 |
archweb | Arch Linux website code | 8 | 6 | 79 | 69 | 10 | 32 | 103 | 34 | 2728 |
TimeSide | Scalable audio processing framework and server written in Python | 15 | 7 | 28 | 0 | 28 | 18 | 260 | 42 | 2721 |
pydici | CRM, billing and staffing management web tool for consulting company | 16 | 9 | 118 | 100 | 18 | 40 | 61 | 27 | 2672 |
karrot-backend | Django API server for the karrot frontend | 3 | 4 | 24 | 3 | 21 | 37 | 83 | 72 | 2346 |
gcd-django | Website of Grand Comics Database | 41 | 6 | 267 | 263 | 4 | 147 | 54 | 17 | 2323 |
MetaCI | Lightweight, Salesforce specific CI app run on Heroku to build Github repositories configured for CumulusCI | 3 | 2 | 75 | 47 | 28 | 28 | 29 | 14 | 2224 |
cove | CoVE is an web application to Convert, Validate and Explore data following certain open data standards - including 360Giving, Open Contracting Data Standard, IATI and the Beneficial Ownership Data Standard | 11 | 4 | 7 | 7 | 0 | 0 | 32 | 10 | 2167 |
okuna-api | 🤖 The Okuna Social Network API | 2 | 1 | 147 | 7 | 140 | 56 | 120 | 28 | 2163 |
tsuru-dashboard | Web dashboard for tsuru PaaS. | 9 | 7 | 65 | 2 | 63 | 0 | 106 | 52 | 2032 |
janeway | A journal management system designed for publishing scholarly articles. | 5 | 2 | 305 | 299 | 6 | 100 | 80 | 23 | 1986 |
OnlineJudge | open source online judge based on Vue, Django and Docker. | 20 | 4 | 62 | 0 | 62 | 15 | 2608 | 740 | 1880 |
openstax-cms | The OpenStax CMS, built using Wagtail on top of Django. | 3 | 3 | 34 | 24 | 10 | 107 | 56 | 6 | 1691 |
patchwork | Patchwork is a web-based patch tracking system designed to facilitate the contribution and management of contributions to an open-source project. | 12 | 4 | 66 | 47 | 19 | 21 | 135 | 45 | 1608 |
foundation.mozilla.org | Mozilla Foundation website | 2 | 2 | 27 | 18 | 9 | 53 | 141 | 85 | 1590 |
tethys | The Tethys Platform main Django website project repository. | 4 | 5 | 47 | 47 | 0 | 33 | 48 | 31 | 1466 |
kamu | You favorite book library | 28 | 2 | 19 | 1 | 18 | 4 | 37 | 27 | 1448 |
djaodjin-saas | Django application for software-as-service and subscription businesses | 9 | 6 | 83 | 2 | 81 | 14 | 198 | 40 | 1430 |
site | Source code for our website | 6 | 1 | 13 | 0 | 13 | 14 | 556 | 36 | 1385 |
huxley | Conference management system for Berkeley Model United Nations. | 114 | 7 | 33 | 6 | 27 | 14 | 25 | 39 | 1380 |
EvalAI | ☁️ 🚀 📊 📈 Evaluating state of the art in AI | 8 | 2 | 63 | 63 | 0 | 20 | 791 | 380 | 1258 |
problem-builder | An XBlock for posing questions to students | 11 | 4 | 0 | 0 | 0 | 2 | 25 | 31 | 1221 |
promgen | Promgen is a configuration file generator for Prometheus | 1 | 3 | 57 | 0 | 57 | 17 | 525 | 90 | 1208 |
nsupdate.info | Dynamic DNS service | 156 | 5 | 32 | 1 | 31 | 7 | 593 | 80 | 1190 |
koku | An open source solution for cost management of cloud and hybrid cloud environments. | 2 | 1 | 40 | 12 | 28 | 55 | 47 | 19 | 1187 |
timestrap | Time tracking you can host anywhere. Full export support in multiple formats and easily extensible. | 60 | 2 | 8 | 0 | 8 | 6 | 1505 | 84 | 1182 |
cccatalog-api | The Creative Commons Catalog API allows programmatic access to search for CC-licensed and public domain digital media. | 2 | 1 | 17 | 4 | 13 | 16 | 38 | 40 | 1151 |
mitoc-trips | The MIT Outing Club's trip management system | 6 | 4 | 71 | 2 | 69 | 28 | 27 | 7 | 1125 |
healthchecks | A Cron Monitoring Tool written in Python & Django | 5 | 4 | 88 | 88 | 0 | 10 | 2190 | 297 | 1069 |
webterminal | ssh rdp vnc telnet sftp bastion/jump web putty xshell terminal jumpserver audit realtime monitor rz/sz 堡垒机 云桌面 linux devops sftp websocket file management rz/sz 自动化运维 审计 录像 文件管理 sftp上传 实时监控 录像回放 网页版rz/sz上传下载 django | 13 | 2 | 43 | 4 | 39 | 8 | 770 | 337 | 1063 |
django-arctic | Django Arctic is a framework that simplifies the creation of custom content management systems. | 19 | 3 | 28 | 1 | 27 | 6 | 65 | 20 | 1038 |
registration | ✏️ Hackathon registration server | 5 | 2 | 40 | 17 | 23 | 8 | 41 | 24 | 970 |
LogESP | Open Source SIEM (Security Information and Event Management system). | 41 | 1 | 93 | 17 | 76 | 37 | 49 | 15 | 962 |
patchman | Patchman is a Linux Patch Status Monitoring System | 43 | 6 | 43 | 28 | 15 | 18 | 70 | 30 | 871 |
vms | Volunteer Management System | 26 | 5 | 52 | 24 | 28 | 9 | 89 | 183 | 857 |
sopds | Simple opds catalog | 182 | 5 | 10 | 10 | 0 | 11 | 111 | 26 | 852 |
Wooey | A Django app that creates automatic web UIs for Python scripts. | 90 | 4 | 23 | 10 | 13 | 12 | 1320 | 140 | 851 |
SMART | Smarter Manual Annotation for Resource-constrained collection of Training data | 22 | 0 | 51 | 28 | 23 | 17 | 60 | 8 | 845 |
koalixcrm | koalixcrm is an Open Source Python CRM and ERP based on django | 105 | 8 | 8 | 8 | 0 | 3 | 349 | 162 | 832 |
sfm-ui | Social Feed Manager user interface application. | 69 | 4 | 44 | 2 | 42 | 13 | 107 | 23 | 821 |
doccano | Open source text annotation tool for machine learning practitioner. | 3 | 1 | 29 | 0 | 29 | 10 | 1818 | 394 | 806 |
omaha-server | Google Omaha server (as known as Google Update) | 131 | 7 | 38 | 1 | 37 | 19 | 141 | 65 | 791 |
Spirit | Spirit is a modern Python based forum built on top of Django framework | 22 | 5 | 91 | 84 | 7 | 16 | 937 | 271 | 723 |
pyfreebilling | routing and rating VoIP application for service provider - AGPL v3 - Based on kamailio | 105 | 6 | 115 | 19 | 96 | 73 | 50 | 27 | 703 |
python-opencivicdata | python utilities for Open Civic Data | 16 | 5 | 0 | 0 | 0 | 66 | 25 | 25 | 663 |
dpaste | The Django project driving dpaste.de | 30 | 8 | 7 | 2 | 5 | 1 | 250 | 89 | 653 |
securethenews | An automated scanner and web dashboard for tracking TLS deployment across news organizations | 3 | 3 | 15 | 12 | 3 | 10 | 72 | 23 | 652 |
www | Dolphin Emulator official website source code (running on https://dolphin-emu.org/) | 52 | 6 | 23 | 23 | 0 | 19 | 51 | 41 | 585 |
django-dynamic-scraper | Creating Scrapy scrapers via the Django admin interface | 239 | 7 | 0 | 0 | 0 | 12 | 912 | 283 | 537 |
vaas | VaaS - Varnish as a Service | 9 | 4 | 5 | 5 | 0 | 12 | 187 | 24 | 530 |
ahmia-site | Ahmia.fi - Hidden service search engine | 100 | 3 | 25 | 2 | 23 | 9 | 34 | 27 | 506 |
tarteel-api | Backend and API for Tarteel.io | 4 | 1 | 28 | 10 | 18 | 14 | 53 | 11 | 478 |
silverstrike | Finance Management Made Easy | 5 | 1 | 55 | 6 | 49 | 7 | 133 | 38 | 468 |
bakerydemo | Next generation Wagtail demo, born in Reykjavik | 8 | 2 | 1 | 1 | 0 | 19 | 287 | 170 | 464 |
fire | Easily create GitHub issues via email | 95 | 2 | 5 | 2 | 3 | 5 | 32 | 4 | 462 |
pinry | The open-source core of Pinry, a tiling image board system for people who want to save, tag, and share images, videos and webpages in an easy to skim through format. | 82 | 6 | 6 | 2 | 4 | 5 | 1415 | 236 | 450 |
django-cas-server | A Django Central Authentication Service server implementing the CAS Protocol 3.0 Specification | 224 | 3 | 9 | 0 | 9 | 17 | 64 | 21 | 442 |
omniport-backend | The Django backend of the one true portal for any and every educational institute | 15 | 1 | 12 | 0 | 12 | 41 | 43 | 7 | 406 |
fermentrack | A replacement web interface for BrewPi | 167 | 2 | 100 | 100 | 0 | 23 | 51 | 23 | 400 |
trunk-player | Trunk Player - Python Django project to play back recorded radio transmissions used on site | 51 | 2 | 37 | 24 | 13 | 23 | 34 | 21 | 378 |
openwisp-controller | OpenWISP 2 controller module (built using Python and the Django web-framework) | 47 | 2 | 8 | 1 | 7 | 15 | 235 | 45 | 366 |
pathagar | Pathagar is a simple bookserver serving OPDS feeds | 233 | 8 | 17 | 13 | 4 | 5 | 76 | 26 | 360 |
django-collaborative | ProPublica's collaborative tip-gathering framework. Import and manage CSV, Google Sheets and Screendoor data with ease. | 2 | 0 | 18 | 13 | 5 | 11 | 43 | 5 | 356 |
pokeapi | The Pokémon API | 11 | 4 | 49 | 0 | 49 | 198 | 1652 | 495 | 343 |
colossus | Self-hosted email marketing solution | 140 | 0 | 90 | 26 | 64 | 17 | 123 | 28 | 336 |
DCRM | Darwin Cydia Repo (APT) Builder & Manager - v4 redesigned in Django. | 67 | 2 | 37 | 16 | 21 | 11 | 118 | 53 | 331 |
Gerapy | Distributed Crawler Management Framework Based on Scrapy, Scrapyd, Scrapyd-Client, Scrapyd-API, Django and Vue.js | 14 | 2 | 40 | 40 | 0 | 5 | 1498 | 364 | 328 |
puput | A Django blog app implemented in Wagtail | 39 | 4 | 2 | 0 | 2 | 7 | 362 | 108 | 289 |
cms | Django-based club management platform | 3 | 0 | 0 | 0 | 0 | 26 | 102 | 12 | 282 |
hubblemon | 107 | 3 | 5 | 5 | 0 | 0 | 46 | 23 | 261 | |
API-Manager | A Django project to manage the Open Bank Project API via API Calls | 51 | 2 | 47 | 12 | 35 | 0 | 31 | 36 | 257 |
Propalyzer | Web app that helps investors evaluate residential investment property opportunities | 77 | 1 | 5 | 5 | 0 | 1 | 32 | 13 | 239 |
photonix | This is a new web-based photo management application. Run it on your home server and it will let you find the right photo from your collection on any device. Smart filtering is made possible by object recognition, location awareness, color analysis and other ML algorithms. | 45 | 2 | 1 | 1 | 0 | 9 | 256 | 26 | 223 |
gchatautorespond | Automatic responses for Google Chat and Hangouts. | 35 | 3 | 12 | 9 | 3 | 6 | 46 | 6 | 213 |
FFXIVBOT | A QQ bot of FFXIV | 26 | 1 | 15 | 15 | 0 | 30 | 116 | 49 | 188 |
vpn-at-home | 1-click, self-hosted deployment of OpenVPN with DNS ad blocking sinkhole | 33 | 1 | 11 | 0 | 11 | 9 | 1019 | 78 | 145 |
youtube-audio-dl | A Django web application for converting YouTube videos to MP3 audio. | 278 | 4 | 3 | 1 | 2 | 3 | 197 | 90 | 141 |
starthinker | Framework for building data workflows provided by Google. | 38 | 1 | 19 | 19 | 0 | 3 | 28 | 13 | 138 |
exist | EXIST is a web application for aggregating and analyzing cyber threat intelligence. | 87 | 0 | 45 | 10 | 35 | 12 | 64 | 10 | 136 |
meethub | This is a Python/Django based event management system. A meetup clone. | 132 | 1 | 22 | 4 | 18 | 5 | 382 | 27 | 126 |
scantron | A distributed nmap / masscan scanning framework | 84 | 0 | 18 | 1 | 17 | 6 | 175 | 40 | 124 |
ResumeParser | A simple resume parser used for extracting information from resumes | 3 | 0 | 5 | 4 | 1 | 5 | 73 | 42 | 94 |
pygmy | An open-source, feature rich & extensible url-shortener + analytics written in Python 🍪 | 52 | 1 | 13 | 13 | 0 | 3 | 512 | 63 | 92 |
django-ipam | django app for IP address management, WIP | 193 | 0 | 17 | 0 | 17 | 4 | 74 | 17 | 89 |
the-zoo | 🐒 A service registry for humans | 19 | 0 | 27 | 9 | 18 | 22 | 33 | 4 | 83 |
grin-explorer | Blockchain explorer for grin | 142 | 1 | 5 | 0 | 5 | 4 | 48 | 28 | 79 |
Ghostwriter | The SpecterOps project management and reporting engine | 10 | 0 | 127 | 55 | 72 | 36 | 178 | 22 | 66 |
WebHashcat | Hashcat web interface | 237 | 2 | 34 | 34 | 0 | 7 | 76 | 19 | 63 |
Episodes | Self Hosted TV show Episode tracker and recommender built using django, bootstrap4. | 41 | 3 | 12 | 12 | 0 | 3 | 125 | 11 | 54 |
docker-box | Web Interface to manage full blown docker containers and images. | 116 | 2 | 33 | 33 | 0 | 5 | 86 | 29 | 33 |
banking-system | A banking System Created Using Django Python Web Framework | 55 | 2 | 7 | 7 | 0 | 6 | 28 | 20 | 23 |
django-channels-chat | A simple Django-Channels web chat! | 190 | 1 | 2 | 0 | 2 | 1 | 196 | 40 | 13 |
Shepherd | A Django application to help red team operators manage a library of domain names | 261 | 0 | 22 | 9 | 13 | 8 | 116 | 18 | 8 |
WebMap | WebMap-Nmap Web Dashboard and Reporting | 224 | 0 | 16 | 16 | 0 | 0 | 48 | 23 | 6 |
The raw data used can be found in this Google Sheet
Top comments (1)
Cool experiment!