Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Django News - Issue 15 - Mar 20th 2020
News DjangoCon Europe 2020 is postponed to September 16-20 Current Covid-19 peak estimates are too close to the original dates (May 27-31), we can not delay making a decision anymore. Some conferences are postponing, others canceling altogether. djangocon.eu Google Summer of Code - Apply by March 31 Students can apply to spend 3 months working on an open source project, including Django! Last year’s GSOC student contributed JSON Field support which is a forthcoming major feature in Django 3.1. withgoogle.com Async views will be in Django 3.1! Check out the pull request to see the fantastic work by Andrew Godwin and the Django team. github.com Articles Google Summer of Code Reflection Fantastic advice from Django's 2019 GSOC student. laymonage.com Use `python -m pip` everywhere Wise advice from Adam Johnson on managing Python dependencies. adamj.eu Against service layers in Django An in-depth piece on structuring code and logic within Django. b-list.org The most critical Python code metric A quick and dirty way to evaluate the quality of any Python code. stevedower.id.au How a request becomes a response: Diving deeper into WSGI Part of an excellent series on Django and webpage internals. djangodeconstructed.com Understanding many to one in Django A deep dive … -
Customizing Django Authentication using AbstractBaseUser
Introduction Django has a builtin app that provides much of the required authentication machinery out of the box. It also allows you to customize authentication if the defaults don’t match your requirements. There are multiple approaches you can take including: Using a Proxy Model based on User. Adding a OneToOneField that points to User on a Profile model. Extending AbstractUser and adding fields for additional profile information. Extending AbstractBaseUser ... -
Managing state in Django models
Managing state in Django models A Django model often will contain some form of state. And there will most likely be events which modify the state. While those two things are not always called like this, the concept still exists. More often than not you will find a view controller assigning the new state to an instance of a model when certain conditions are met. In some cases you will see the event code being abstracted to make it easier to test, maybe in a separate function or class, maybe to a model method. And more often than you should you will see this messing up the state of an instance forcing someone to wake up at 2am to connect to the database - or Django admin if setup - and set a valid state. Thankfully the chance for the last thing to happen can be greatly reduced. Over the years I found that not everyone is familiar with the concept of a finite-state machine (which would help addressing this problem). I have also met people who had in depth knowledge of state machines in all their forms and would have been able to implement one as a stand-alone system, … -
We're Now a Little Company Called Feldroy
We discovered that our branding as "Roy Greenfeld" was causing confusion. People came and thought we were some guy named Roy, since Roy is a common American first name. Furthermore, our last name of "Roy Greenfeld" had been causing errors in systems that don't handle spaces well. I posted about our name confusion and system error dilemma on dev.to, and the DEV community came up with amazing solutions for us. The turning point of the discussion there was: "Why not mix it up with Feldroy? Seems cool and science-fiction-y." -- Daniel Starner "+1 for Feldroy. Feels like the name of a hypothetical protagonist of a book by Aldous Huxley" -- rhymes Well, Daniel Roy Greenfeld and I discussed it, and now we're Daniel Feldroy and Audrey Feldroy. Naturally, our little company is now called Feldroy too. It'll take some time to get all the paperwork filed, which is a bit tricky at the moment given that Los Angeles City Hall is closed due to the COVID-19 outbreak. In the meantime, we're updating our profiles and our website branding to call ourselves Feldroy. There may be a few hiccups while the DNS records propagate and we trawl everything manually to update … -
We're Now a Little Company Called Feldroy
We discovered that our branding as "Roy Greenfeld" was causing confusion. People came and thought we were some guy named Roy, since Roy is a common American first name. Furthermore, our last name of "Roy Greenfeld" had been causing errors in systems that don't handle spaces well. I posted about our name confusion and system error dilemma on dev.to, and the DEV community came up with amazing solutions for us. The turning point of the discussion there was: "Why not mix it up with Feldroy? Seems cool and science-fiction-y." -- Daniel Starner "+1 for Feldroy. Feels like the name of a hypothetical protagonist of a book by Aldous Huxley" -- rhymes Well, Daniel Roy Greenfeld and I discussed it, and now we're Daniel Feldroy and Audrey Feldroy. Naturally, our little company is now called Feldroy too. It'll take some time to get all the paperwork filed, which is a bit tricky at the moment given that Los Angeles City Hall is closed due to the COVID-19 outbreak. In the meantime, we're updating our profiles and our website branding to call ourselves Feldroy. There may be a few hiccups while the DNS records propagate and we trawl everything manually to update … -
Onboarding - Building SaaS #48
In this episode, we did some design work to plan out the onboarding flow for new users. I spoke through my design process, outlined what a new user will need to do to succeed, wrote down the plan in GitHub issues, then started to implement that flow. I started the stream with a quick fix to the main app view. After that, we started a new project in the app. I needed to design the starting experience for a user. -
Remote Work
New Django Governance ModelJohn Cleese on CreativityJohn Mulaney SNL MonologueWhy Working from home is Both Awesome and Horrible -
How to sort Django admin list column by a value from a related model
Here's the real-life case. On this blog, I have two models: Post and PostStats. The former is, as you might have guessed, for posts, while the latter is for per post statistics like a view count. Here's a simplified version of both models: class Post(models.Model … Read now -
Against service layers in Django
Recently I’ve seen posts and questions pop up in a few places about a sort of “enterprise” Django style guide that’s been getting attention. There are a number of things I disagree with in that guide, but the big one, and the one people have mostly been asking about, is the recommendation to add a “service layer” to Django applications. The short version of my opinion on this is: it’s probably not what you want … Read full entry -
Use Pathlib in Your Django Settings File
Django’s default settings file has always included a BASE_DIR pseudo-setting. I call it a “pseudo-setting” since it’s not read by Django itself. But it’s useful for configuring path-based settings, it is mentioned in the documentation, and some third party packages use it. (One that I maintain, the Scout APM Python integration, uses it.) Django has, up until now, defined it as: import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) This changes in version 3.1, which as I write is still months in the future. Thanks to a contribution by Jon Dufresne and Curtis Maloney, it’s instead defined using pathlib: from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve(strict=True).parents[1] pathlib was added to Python’s standard library in Python 3.4, thanks to PEP 428. All file-path using functions across Python were then enhanced to support pathlib.Path objects (or anything with a __fspath__ method) in Python 3.6, thanks to PEP 519. pathlib is great! It has an easier API than os.path.join(), allows method chaining, and handles path normalization automatically. See how you can define a subdirectory using BASE_DIR / 'subdir'. If you want to read more, see … -
Layoffs are Coming
It’s looking increasingly likely that the COVID-19 pandemic will cause a recession. It’s easy to think we might be immune from the effects of a global recession, but my experience is that tech companies are quick to cut staff, especially engineers, in the face of declining markets. I hope I’m wrong, but I don’t think I am. Either way, it’s not going to hurt to prepare. -
Understanding many to one in Django
What is a many to one relationship? In database design many to one (or one to many) refers to a relationship between one or more entities where a single entity can have many entities connected. Let's make an example. Consider two entities: Mother and Daughter. As we know from real life, these two entities are most of the times connected like so: Every Daughter has one Mother One Mother can have many Daughters So we have a many to one here where many is the Daughter and one is the Mother. In an Entity Relationship Diagram this relationship is described with two boxes connected by the popular crow's foot: On the Mother side you can see two lines which stand for one and only one. That's the "one side" of the relationship. On the Daughter side instead you can see the crow's foot and a circle. The circle means optional, that is, there could be zero, one, or many Daughters. Technically a Mother should have at least one Daughter to qualify for her status, but I wanted to show you the circle and I took this liberty. A crow's foot with a straight line on top instead means at least … -
Django News - Issue 14 - Mar 13th 2020
News The Django Project adopts a new governance model The Django Project is switching from a core team to a Django Technical Board. Find out what this means and how the project will be governed. Django co-creator and former BDFL, Jacob Kaplan Moss, wrote Django’s new governance model to share his thoughts. djangoproject.com PyCon US 2020 has been canceled due to COVID-19 The Foundation is currently exploring options to re-schedule or cancel the conference. Any final decision to cancel or reschedule PyCon US will be made early enough to give you time to cancel or defer your travel plans. blogspot.com Python Insider: Python 3.7.7 is now available Python 3.7.7 is out! blogspot.com Articles About Removing Duplicates in the Database - DjangoTricks An elegant code snippet for removing duplicates in a database. djangotricks.com 9 Django Tips for Working with Databases Multiple tips for getting more out of Django's ORM. works-hub.com Django Best Practices - Function-Based Views vs Class-Based Views An overview of the pros/cons of each approach. learndjango.com Django's Field Choices Don't Constrain Your Data An interesting take on Field.choices in Django. adamj.eu TLDR: Generate Django Secret Key This TLDR is a quick reminder of how to generate a secret key … -
Django's new governance model
Starting today, Django has a new governance model. Previously, a small “core team” made most decisions, including electing a Technical Board to own decisions about each release. Now, the “core team” is gone; all power rests with the Technical Board. Anyone who’s made substantial contributions to Django is now eligible to run, and the board is now elected by the DSF Membership at large. You can read more about the change in today’s announcement, and if you want to full details they’re in DEP 10. -
API-First Architecture
Weekly Django Chat NewsletterDjango for APIs book Official Django REST Framework Tutorial - A Beginner's GuideAymeric Augustin 3-part series DRF Authentication Docs DjangoCon US 2018 - Finally Understand Authentication in Django REST Framework LearnDjango - The 10 Most-Used Django PackagesLearnDjango - Essential Django 3rd Party Packages -
How to serve private media files with Django
In this tutorial, we will create a barebones document manager with these features: Logged in users can upload files. Superusers can view all files. Regular users can view only the files they uploaded. These steps were performed on Ubuntu 18.04 LTS. Getting Started First lets add the universe repository and install python3-venv. sudo add-apt-repository universe sudo apt install -y python3-venv The Project and App Now create the project. mkdir ~/.virtualenvs python3 -m venv ~/... -
Website Search using Django and PostgreSQL Trigrams
Over the years I've become increasingly wary of the word "easy" in software documentation. Pick a software project at random, and there's a good chance that “easy” will appear early on. Over the years I've become increasingly wary of the word "easy" in software documentation. Pick a software project at random, and there's a good chance the documentation will lead off with something like "Booloogent makes the process of frobnifying your wakalixes easy!" And then you try to use the package or feature or whatever, and you find that it is not easy. It might not work at all, and you might grow angry with the author of Booloogent for lying, or with yourself for failing at something so easy, or maybe both at once. So it's refreshing - even exhilarating - when a thing really does turn out to be easy. And such is the case with Django's "trigram_similar" lookup. One of Imaginary Landscape’s healthcare clients needed a search function (in their Django-based website) that would allow users to find medical service facilities by entering either the provider's name or some component of their address, such as a street name or a city. The search widget also had to … -
Using Django Check Constraints for the Sum of Percentage Fields
I previously covered using Django’s CheckConstraint class to ensure a field with choices is constrained to only valid values. Here’s another use case, based on an application I worked on. It uses a check constraint to ensure a set of fields, representing percentages, always sum up to 100. Imagine a book application where we want to track books our percentage progress in three categories: Pages we’ve read Pages we have left to read Pages we have deliberately chosen to ignore We could use a Django model with one field for each of those three categories: from django.db import models class Book(models.Model): percent_read = models.PositiveIntegerField() percent_unread = models.PositiveIntegerField() percent_ignored = models.PositiveIntegerField() def __str__(self): return f"{self.id} - {self.percent_read}% read" Using PositiveIntegerField means no field contains a number less than 0. That’s a good start, but the fields can still store numbers greater than 100, or their sum might be less or more than 100. Using a check constraint, we can enforce such constraints, telling the database to prevent storage of bad data. In this case, we only need to enforce that their sum is 100 to automatically bound the individual fields between 0 and 100. We add such a constraint in the … -
QuerySets of various models
In general, the first thing we try to do to reduce the load time of a page in Django is to reduce the number of queries we are making to the database. This often has the greatest impact, sometimes orders of magnitude greater than other improvements. One problem I recently hit with a specific set of pages was that there are potentially seven different models that may have zero or more items for a given request. This could mean we do seven queries that are all empty. These are for all distinct models, but in this case, they are used for the same purpose, and this case, we always need all of them, if there are any relevant records. Whilst there are seven models, there may be more in the future. Each of these models has a specific method, that validates some data against the rules that are applicable to that model, and the stored attributes. But each model has a different set of attributes, and future models will more than likely have different attributes. There are at least three different ways we could have solved this problem. It turns out we have solved similar problems in the past the … -
The Simplest Way to Create a Python Virtual Environment
A lot of fog and mysteries surround Python virtual environments. There are loads of packages, tools, and wrappers trying to make developer's life with virtual environments easier. But if we look at the basics, we'll see that actually, creating a virtual environment in Python has never been easier. Starting from … Read now -
Python in GitHub Actions
GitHub’s own CI called GitHub Actions has been out of closed beta for a while and offers generous free quotas and a seamless integration with the rest of the site. Let’s have a look on how to use it for an open source Python package. -
Django News - Issue 13 - Mar 6th 2020
News Django security releases issued for 3.0.4, 2.2.11, and 1.11.29 A new security and bug fix release. As ever, updating to the latest version is always recommended. PSA: This is very likely to be the last release of Django 1.11. Time to move on if you're still there. (via Carlton Gibson) Django 1.11 LTS reaches the end of extended support in April 2020. djangoproject.com 30% off PyCharm with all proceeds towards Django Receive 30% off the powerful PyCharm editor. All proceeds benefit the Django Software Foundation. jetbrains.com Articles The Django Speed Handbook: Making a Django app faster This comprehensive handbook has something for everyone from the backend to even some helpful frontend tricks. openfolder.sh How to Disallow Auto-named Django Migrations Adam Johnson walks us through three methods for disallowing Django's auto-named Migrations, which includes Django's check system and pre-commit hooks, which may be new to you. adamj.eu Views on Views Matt Layman explains one of Django's core building blocks, Django Views. mattlayman.com Mental Models for Class Based Views This article is a deep dive into how Django's class-based views work behind the scenes. djangodeconstructed.com Sponsored Link Django Crash Course: Covers Python 3.8 and Django 3.x - Alpha Version The authors … -
Views On Django
Full show notes are available at https://www.mattlayman.com/django-riffs/3. -
Episode 3 - Views On Django
On this episode, we look at views, a major component within Django and a primary place where your code will run. Listen at djangoriffs.com. Last Episode On the previous episode, we talked about URLs and how they describe the main interface that a browser can use to interact with your application. What Is A View? A view is a chunk of code that receives an HTTP request and returns an HTTP response. -
Rotterdam python meetup
Microservices with Python for AI in radiology - Coert Metz In radiology, people take a long time to become experienced. Medical school, MD, certified radiologist... And when they're 68 they're off to a pension. What they did at Quantib was to try and "scale radiology experience with AI". Detection and classification of prostate lesions. Same with breast MRIs. Brain shrinkage. They hope it increases the amount of MRI scans that can be processed. And also the quality of the analysis. He demoed the application. There's detection of brain regions in the software, for instance. When you compare two MRI scans at different points in time, you can see the difference and compare that difference with what you would see in a healthy person. Hospital practice often means downloading radiology RMI images from a central hospital image storage server ("PACS"), taking them to a separate workstation for analysis and then going back with reports. This takes time, so it is sometimes omitted due to time pressure... What they're working on now is to run their AI software on a server and connect it to the image storage service. They designed their software as a bunch of microservices. Storage service, import, dispatch, …