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.