Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Onboarding Continuity - Building SaaS #50
In this episode, we stepped from the welcome onboarding page to the first interactive page in the flow. I extracted the common banner for each of the templates and customized it for each of the steps in the process. The first thing we did was create a button on the starting page. The button connects the welcome page to the second step in the flow where the app will ask for information about the user’s school year. -
Templates For User Interfaces
In the previous Understand Django article, we looked at the fundamentals of using views in Django. This article will focus on templates. Templates are your primary tool in a Django project for generating a user interface. Let’s see how templates hook into views and what features Django provides with its template system. Set Up Templates We need a place for templates to live. Templates are static files that Django will fill in with data. -
LearnDjango.com
Weekly Django Chat NewsletterLearnDjango.comwsvincent.comDjango Slug TutorialDjango for Professionals bookDjango Caching for BeginnersDjango Markdown Tutorial -
How to Combine Two Python Decorators
Imagine you have some Django views using the same two decorators: from django.contrib.auth.decorators import login_required from django.views.decorators.http import require_GET @require_GET @login_required def home(request): ... @require_GET @login_required def about(request): ... @require_GET @login_required def contact(request): ... It’s a bit repetitive, and prone to mistakes on new views, such as using the wrong order, or missing one. You can instead combine them into one decorator. In Python, the decorator syntax is a shortcut for calling the decorator and storing its result in the same name. For example, this snippet: @login_required def index(request): ... is the same as: def index(request): ... index = login_required(index) Therefore to combine these decorators, you can implement a new function that calls each of the decorators in turn like this. To maintain the same order, you should call them “from the inside out”. So you can make a combined decorator function like this: def require_GET_and_login(func): return require_GET(login_required(func)) You can then apply it to views like this: @require_GET_and_login def home(request): ... @require_GET_and_login def about(request): ... @require_GET_and_login def contact(request): ... Great! Some decorators take arguments, for which this technique needs expanding a bit. For example, Django’s require_http_methods is a general version of require_GET that takes an argument for the methods. If … -
Invictify - A Scheduler for Triggering Workflows
Hi there, I've recently cr... -
Using Markdown in Django
As developers, we rely on static analysis tools to check, lint and transform our code. We use these tools to help us be more productive and produce better code. However, when we write content using markdown the tools at our disposal are scarce. In this article we describe how we developed a Markdown extension to address challenges in managing content using Markdown in Django sites. Do you think they had a linter?Photo by mali maeder from Pexels Table of Contents The Problem Prior Work Using Markdown Converting Markdown to HTML Using Markdown Extensions Creating a Markdown Extension to Process Inline Links Validate and Transform Django Links Validating mailto Links Handling Internal and External Links Resolving URL Names Handling External Links Requiring Scheme Putting it All Together Conclusion Taking it Further The Problem Like every website, we have different types of (mostly) static content in places like our home page, FAQ section and "About" page. For a very long time, we managed all of this content directly in Django templates. When we finally decided it's time to move this content out of templates and into the database, we thought it's best to use Markdown. It's safer to produce HTML from Markdown, … -
Django ListView - podstawowy widok generyczny
Wyświetlanie listy, paginacja, filtrowanie, czy sortowanie to zaledwie początek tego co oferuje generyczny widok ListView w Django. Przekonaj się sam! -
Optimize Django memory usage
Django memory usage is usually quote good, but sometimes – if you use the Django ORM without really knowing what is doing behind the scenes – you can see a huge spike in RAM usage. Fortunately there exist some simple methods to optimize Django memory usage. Table of Contents 1. The problem 2. A bit of Django memory profiling 3. Optimize Django memory usage: using iterator() method 4. Optimize Django memory usage: using pagination 5. Conclusion 1. The problem Consider this is the apparently innocent view from django.http import HttpResponse from .models import FirstModel # this view will make crazy use of the RAM ;) def my_view(request): # this queryset contains about 100k records # each of them has many ForeignKeys to other models huge_queryset = FirstModel.objects.all() f = open('dumb.dump', 'w') for record in huge_queryset: print >>f, record f.close() return HttpResponse('Dumb dump completed!') as you can see it’s very simple, the peculiarity here is the dimension of the queryset, because the table contains about 100k records, and each record has several ForeignKey fields to other models. An experienced Django developer should immediately see the problem, but it can be interesting to analyze the problem a little bit more. If you … -
Django News - Issue 16 - Mar 27th 2020
News Wagtail roadmap priorities 2020 We're reviewing our roadmap for the next 12 months and we'd love your input. If you use Wagtail, please help shape our plans. google.com PyCon US 2020 in Pittsburgh, Pennsylvania is cancelled The PSF’s priority is the health and safety of the community and the COVID-19 (Coronavirus) pandemic has made it unsafe to hold PyCon US this year. blogspot.com Pipenv new release A new Pipenv release is due at the end of the month. google.com Articles Using Django Check Constraints to Ensure Only One Field Is Set From Adam Johnson, a demonstration of using check constraints in a Django model. adamj.eu How Eldarion Works Remotely — Eldarion Blog Notes on working remotely from a leading Django consultancy. eldarion.com East Meets West When Translating Django Apps Notes from a PyCascades 2020 talk on using Django's built-in translation app. automationpanda.com Postgres VIEW from Django QuerySet How (and why) to use Django's ORM to generate a Postgres VIEW. schinckel.net How to restrict access with Django Permissions A look at the various ways to implement Django permissions. coderbook.com Double-checked locking with Django ORM How to implement double-checked locking within Django. lukeplant.me.uk Designing a User-Friendly ML Platform with Django Creating … -
Starting the Onboarding Flow - Building SaaS #49
In this episode, we worked on the progress element that will display in every step of the onboarding flow. I added some labels and styled the banner using Tailwind CSS. At the end of the stream, we boxed in the shape of the welcome page with some placeholder elements. The very first thing I did was insert a top bar that was unstyled to the top of the welcome page. We added some placeholder text for each of the steps in the onboarding flow. -
Google Summer of Code - Sage Abdullah
Weekly Django Chat NewsletterGoogle Summer of Code 2020 (March 31st deadline)Sage’s GSOC proposalSage’s GSOC Blogmwparserfromhell - A Python parser for MediaWiki wikicode -
Using Django Check Constraints to Ensure Only One Field Is Set
I previously covered using Django’s CheckConstraint class to validate fields with choices and percentage fields that total 100%. Here’s another use case. A project I was working on recently stores “scores” which may have a single typed value: an integer, or a decimal, or a duration. Because they have different types, they are stored in separate columns in the database. Therefore, for a single score, only one of these columns may be filled in (not null). You could solve this by using model inheritance. The downside of this is that using either concrete or abstract inheritance, you’d need multiple tables. This is also a lot of work for a single differing field. Instead of this, we settled on a single model appraoch with multiple value columns, only one of which should be set. The model looks something like this: from django.db import models class ScoreType(models.IntegerChoices): POINTS = 1, 'Points' DURATION = 2, 'Duration' class Score(models.Model): type = models.IntegerField(choices=ScoreType.choices) value_points = models.IntegerField() value_duration = models.DurationField() (IntegerChoices is one of Django 3.0’s new enumeration types.) If type is ScoreType.POINTS, the value_points column should be set. And likewise, if the type is ScoreType.DURATION, the value_duration column should be set. However confident you are … -
Setting Python's Decimal Context for All Threads
Python’s decimal module has concept of a “context.” This defines the default precision of new Decimals, how rounding works, and lots of other behaviour. Maths gets complicated! It’s quite common to need to customize the decimal context, to control one of these features. As the decimal documentation states, contexts are per-thread: The getcontext() function accesses a different Context object for each thread. Having separate thread contexts means that threads may make changes (such as getcontext().prec=10) without interfering with other threads. This isolation is good, but it also means that it’s an easily forgotten concern when adding threading. This could cause hard-to-discover arithmetic bugs. Oh no! Thankfully, there’s a fix, as per the decimal documentation: [For new threads] the new context is copied from a prototype context called DefaultContext. To control the defaults so that each thread will use the same values throughout the application, directly modify the DefaultContext object. This should be done before any threads are started so that there won’t be a race condition between threads calling getcontext(). It then has this example: # Set applicationwide defaults for all threads about to be launched DefaultContext.prec = 12 DefaultContext.rounding = ROUND_DOWN DefaultContext.traps = ExtendedContext.traps.copy() DefaultContext.traps[InvalidOperation] = 1 setcontext(DefaultContext) # … -
Is Django best framework for your web application development
What is Django? Django is a Python Framework or in easy words, it is an online development framework. Django is a high-level associate that has an MVC-MVT titled design. Django framework is written on fast and powerful python language Django has an associate ASCII text file assortment of libraries for building a completely functioning net application What is A Framework? A Framework gives a structure and basic techniques to make the life of a web application engineer a lot simpler for structure adaptable, versatile and viable web applications Why Django framework? Django is viewed as the best Python web system, and it's incredible for making database-driven sites A Python web system is a code library that gives instruments and libraries to disentangle normal web improvement tasks Django is associate degree open supply framework, conjointly one among the foremost standard open supply frameworks permits programmers to scale Python comes. Django is constructed on the principle of model read model subject pattern (MVT) and it helps developers build a complicated database-driven websites. With regards to web advancement, the structure you choose to utilize is crucial. Django is a free, open source, a top of the line structure written in the broadly basic, … -
How to Upload a File Using Django REST Framework
When you develop a web app or a mobile app with Django, it is common to use the Django REST Framework for communication with the server-side. The client-side makes GET, POST, PUT, and DELETE requests to the REST API to read, create, update, or delete data there. The communication by Ajax is pretty uncomplicated, but how would you upload an image or another file to the server? I will show you that in this article by creating user avatar upload via REST API. Find the full code for this feature on Github. Extend Django User model We will start by installing Pillow for image handling to the virtual environment using the standard pip command: (venv)$ pip install Pillow Create accounts app with a custom User model: # myproject/apps/accounts/models.py import os import sys from django.db import models from django.contrib.auth.models import AbstractUser from django.utils import timezone from django.utils.translation import gettext_lazy as _ def upload_to(instance, filename): now = timezone.now() base, extension = os.path.splitext(filename.lower()) milliseconds = now.microsecond // 1000 return f"users/{instance.pk}/{now:%Y%m%d%H%M%S}{milliseconds}{extension}" class User(AbstractUser): # … avatar = models.ImageField(_("Avatar"), upload_to=upload_to, blank=True) You can add there as many fields as you need, but the noteworthy part there is the avatar field. Update the settings and add … -
How to Upload a File Using Django REST Framework
When you develop a web app or a mobile app with Django, it is common to use the Django REST Framework for communication with the server-side. The client-side makes GET, POST, PUT, and DELETE requests to the REST API to read, create, update, or delete data there. The communication by Ajax is pretty uncomplicated, but how would you upload an image or another file to the server? I will show you that in this article by creating user avatar upload via REST API. Find the full code for this feature on Github. Extend Django User model We will start by installing Pillow for image handling to the virtual environment using the standard pip command: (venv)$ pip install Pillow Create accounts app with a custom User model: # myproject/apps/accounts/models.pyimport osimport sysfrom django.db import modelsfrom django.contrib.auth.models import AbstractUserfrom django.utils import timezonefrom django.utils.translation import gettext_lazy as _def upload_to(instance, filename): now = timezone.now() base, extension = os.path.splitext(filename.lower()) milliseconds = now.microsecond // 1000 return f"users/{instance.pk}/{now:%Y%m%d%H%M%S}{milliseconds}{extension}"class User(AbstractUser): # … avatar = models.ImageField(_("Avatar"), upload_to=upload_to, blank=True) You can add there as many fields as you need, but the noteworthy part there is the avatar field. Update the settings and add the accounts app to INSTALLED_APPS, set the AUTH_USER_MODEL, … -
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, but had trouble integrating one … -
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