Django community: Community blog posts RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Creating Dynamic Forms with Django
What is a dynamic form and why would you want one? Usually, you know what a form is going to look like when you build it. You know how many fields it has, what types they are, and how they’re going to be laid out on the page. Most forms you create in a web app are fixed and static, except for the data within the fields. A dynamic form doesn’t always have a fixed number of fields and you don’t know them when you build the form. The user might be adding multiple lines to a form, or even multiple complex parts like a series of dates for an event. These are forms that need to change the number of fields they have at runtime, and they’re harder to build. But the process of making them can be pretty straightforward if you use Django’s form system properly. Django does have a formsets feature to handle multiple forms combined on one page, but that isn’t always a great match and they can be difficult to use at times. We’re going to look at a more straightforward approach here. Creating a dynamic form For our examples, we’re going to let the … -
Setup React
Below is a reference we made t... -
Staging Django for Production & Local Development
## How do you have different s... -
Angular 6|5 Tutorial (with RESTful Django Back-End)
Throughout this Angular 6 tutorial, we'll learn to build a web application with Angular 6, the latest version of Angular--the most popular framework/platform for building mobile and desktop client side applications created and used internally by Google. By the end of this Angular 6 tutorial, you'll learn: how to install the latest version of Angular CLI, how to use the Angular 6 CLI to generate a new Angular 6 project, how to use Angular 6 to build a simple CRM application, what's a component and component-based architecture how to create Angular 6 components, how to add component routing and navigation, how to use HttpClient to consume a REST API etc. The Django Back-End We'll make use of a simple CRM API built with Django and Django REST framework. Since this is an Angular tutorial we'll not focus on building the API as this will be the subject of a separate tutorial but you can grab the source code of the back-end API from this repository You can use the following commands to start the development server: # Clone the project and navigate into it $ git clone https://github.com/techiediaries/django-crm $ cd django-crm # Create a virtual environment and install packages $ … -
Overriding Field Widgets In Django Doesn't Work. Template Not Found. The Solution
One day you may want to override a default Django form input widget. Let's say; you'll want to tweak a Date widget, so it has type="date" on it. So you'd go out and do the regular drill: 1) Find the source file inside the Django dir ... Read now -
2018 life update
“So, what’s new with you?” Um, a lot: Today’s my last day at 18F. It’s been an honor and a privilege to get to work at such an amazing place with such fantastic colleagues. I’ve learned so much. If you have the oportunity to join 18F – take it. It’s truly a unique oportunity. If you’re thinking about joining and want to chat about my experience there, I’d be happy to talk. -
A reading list for new engineering managers
Like many engineers, I got thrown into management without any real guidance. I thought management was just telling people what to do. I thought there wasn’t any real science to it; you just needed to feel your way through it. I was wrong: there’s a whole field of study here, and you can learn a lot by, you know, studying! This is the reading list I wish I’d been given as a new engineering manager. -
django-translated-fields – localized model fields without magic
django-translated-fields – localized model fields without magic There are many ways to save and retrieve multilingual content in a database; countless blog posts, emails and software packages have been written discussing or helping with this problem. Two main approaches exist to tackle the problem: Use a table for the language-independent content, and a table for language-specific content. The latter most often has a foreign key to the former and a language field. There will be a record in the latter table for each record in the former, or less if some dataset isn’t available in all languages. django-hvad, django-parler and also FeinCMS 1’s translations module follow this approach. Use only one table, but use several fields to store the localized data. django-modeltranslation is probably the best known app implementing this approach. (Other ways of course exist. Among the more interesting packages (to me) are django-nece using Postgres’ JSONB fields and django-vinaigrette using gettext.) Why write another package? The features they provide are at costly to implement and hard to maintain. For example, django-modeltranslation supports adding translations to third party apps which themselves do not support any translations, but to do this it has to not only provide properties for attribute … -
File checksums in Python: the hard way - Shane Kerr
(Summary of a talk at the Amsterdam python meetup) Shane is data hoarder. He hates losing data. He has lots of data. He could move it to the cloud, but he doesn't trust that: cloud companies go away after a time. And: disks are cheap now, so he doesn't need to. But: bad things happen to good data. Disks go corrupt. You can use checksums to detect problems. In the ideal work, the os/hardware detects problems and everything just works. But it isn't true for linux RAID (which doesn't do checks). ext4 doesn't do checking at all. ZFS could work, but the license is deliberately linux-GPL-unfriendly. So: he wants proper checksums. You could use sha1sum in a shell script and pipe the checksums to a file. But the simple case doesn't handle metadata. And it isn't parallel. So... he started a python program. Python is "batteries included": it has a great standard library. For instance os.walk() which goes through all the directories and files. With os.path.join() and os.path.normpath() you get usable full filepaths. With hashlib.sha224() he could get a hash per file. He tried it out with various python versions: python3 (cpython3) is the base. python 2: works, but for … -
RESTful APIs and Django - Emad Mokhtar
(Summary of a talk at the Amsterdam python meetup) Ehmad Mokhtar used Django a lot. And he loves web APIs: you can have many intergrations. You build one back-end and it can be used by many other services and front-ends. It is also core for microservices and "service oriented architectures". So: APIs = business! Without APIs, you have no intergrations. So often you won't have as much business. What is a RESTful API? It is an architectural style that uses HTTP: you work on URLs ("resources") and you use HTTP verbs ("GET", "DELETE", "POST"). If you build an API, developers are your API customers. So you need, for instance, great documentation. You need to keep that in mind all the time. If you use django and you want to build an API: use django rest framework (DRF). DRF feels like django itself. It uses the ORM. And it is perhaps even better documented than Django itself. A tip he has is to use two views per model. In django, you can have a separate list view, a delete view, a regular view, etc. In DRF you are best off having two: One for listing items and creating new ones. (/customers/) … -
The origins of Python: the ABC language - Rolf Zwart
(Summary of a talk at the Amsterdam python meetup) How to compare python to ABC? ABC is the unsuccessful language that was the inspiration for python. Guido van Rossum was originally the main implementor of the ABC language. ABC was intended for the casual user. Home users. But also experts in other fields, but that were not programming experts. The focus was on friendliness of the language and on programmer productivity, not program efficiency. It also was used as a teaching/research language. Research on ABC was started before 1980. The first version was released in 1987. In the end of 1989, Guido started developing python, with the 0.9.0 version being released to Usenet in february 1991. His research group needed an easy-to-use scripting language for the distributed OS they were working on, that was why he started building Python. (He chose the name because he was a fan of the English TV series monty python's flying circus). ABC was, like python, developed at the CWI (centrum voor wiskunde en informatica) in the Netherlands. The claim of ABC was that the programs build with it were typically around a quarter of the size of the equivalent Pascal or C programs. Some … -
Beginner's Angular 4|5 Tutorial Series for Django Developers
In the previous tutorial, we've learned how to integrate Angular 4 with Python & Django. This tutorial will be dedicated to how to get started with Angular 4|5. Throughout this beginner's series, you'll learn how you can use Angular 4|5 to build client side web applications for mobile and desktop with a Django backend. This tutorial is a part of a tutorial series that contains the following tutorials: Building Modern Web Apps with Python, Django Rest Framework and Angular 2+ Django REST framework (DRF) with Angular 2+ tutorial Getting Started with The Angular CLI (this one) The Angular 4|5 Router: Component Routing: the router module is one of the most important blocks of the Angular framework because it allows you to build apps with multiple pages and add routing between them. So in this part we will cover the Angular router in depth and by examples. Angular Components Explained: : in this tutorial we will learn the basics of components in Angular and the new additions in Angular 5. Getting Started with The Angular HTTP Client: in this tutorial we'll learn how to use the new HttpClient API, available only for Angular 4+ to make HTTP requests in Angular 4+ … -
Authenticating via JWT using Django, Axios, and Vue
Getting Django Rest Framework, JWT, Axios, and Vue.js to play nice isn't easy. Here's my quick-and-dirty cheatsheet that I wrote while glueing the pieces together. Note: My architecture doesn't use django-webpack-loader. Instead, I'm running Django and Vue.js as two separate projects. I do this because I much prefer generating new projects with vue create over configuring webpack. The Back-End First, install some Django parts using the installer of your choice: pip install Django pip install djangorestframework pip install django-cors-headers pip install djangorestframework-jwt Then, configure Django in settings.py: INSTALLED_APPS = ( ... 'rest_framework', 'rest_framework.authtoken', 'rest_framework.authtoken', 'corsheaders', ) MIDDLEWARE_CLASSES = ( ... 'corsheaders.middleware.CorsMiddleware', ) CORS_ORIGIN_ALLOW_ALL = False CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_WHITELIST = ( # TODO - set this properly for production 'http://127.0.0.1:8080', 'http://127.0.0.1:8000', ) REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( # By default we set everything to admin, # then open endpoints on a case-by-case basis 'rest_framework.permissions.IsAdminUser', ), 'TEST_REQUEST_RENDERER_CLASSES': ( 'rest_framework.renderers.MultiPartRenderer', 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.TemplateHTMLRenderer' ), 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', ), 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', 'PAGE_SIZE': 20, } from datetime import timedelta JWT_AUTH = { 'JWT_ALLOW_REFRESH': True, 'JWT_EXPIRATION_DELTA': timedelta(hours=1), 'JWT_REFRESH_EXPIRATION_DELTA': timedelta(days=7), } Once that's done, it's time to do modify the urls.py: from django.conf.urls import include, url ... urlpatterns = [ ... # JWT auth url(r'^api/v1/auth/obtain_token/', obtain_jwt_token), … -
The final INTERNAL_IPS fix for development hosts
The final INTERNAL_IPS fix for development hosts Django’s INTERNAL_IPS setting is an ongoing source of frustration and confusion (not only, but also) for users of django-debug-toolbar, especially when using non-local addresses. This is very useful for testing a website using mobile devices if you do not have a very fast internet connection where it does not matter whether you connect to a host through the local network or via the internet, for example using localtunnel. For some time we had a utility function which automatically added all detected network interface IPs to INTERNAL_IPS. However, this does not work when using virtualization software such as Docker or Vagrant with port forwarding, because the VM’s (or container’s) IP isn’t what you want – you want the host IP. Once I took a step back I saw a different, but much simpler solution. INTERNAL_IPS can be replaced with an object which simply answers True to all __contains__-type questions: if DEBUG: # `debug` is only True in templates if the vistor IP is in INTERNAL_IPS. INTERNAL_IPS = type(str('c'), (), {'__contains__': lambda *a: True})() -
PyCon IT 2018 “Nove”
PyCon Italia is the national conference where professionals, researchers and enthusiasts of the most beautiful programming language gather together. -
How to Apply Image Filters in OpenCV with Python
Add your own image filters on ... -
Goodbye manage.py
Every Django project starts with a manage.py file in its root. It's a convenience script that allows you to run administrative tasks like Django's included django-admin. In our last post, we discussed the merits of including a setup.py file in your project to make it installable as a true Python package. We'll build on that and show you how to properly setup a console script in the package. Hello Entry Points The setup function provided by setuptools accepts an entry_points keyword argument that is used to dynamically create scripts from a provided Python function on install. If we crack open the existing manage.py and strip it down to its essentials, we can see it isn't really doing much: import os import sys os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) It sets a default environment variable and then calls a function passing in the provided command line arguments. This can easily be turned into an entry point by simply making it a function inside our project. I typically add it to myproject/__init__.py like so: import os import sys def manage(): os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) Now we adjust our setup.py to add the entry point: setup( ... entry_points={'console_scripts': [ … -
Goodbye manage.py
Every Django project starts with a manage.py file in its root. It's a convenience script that allows you to run administrative tasks like Django's included django-admin. In our last post, we discussed the merits of including a setup.py file in your project to make it installable as a true Python package. We'll build on that and show you how to properly setup a console script in the package. Hello Entry Points The setup function provided by setuptools accepts an entry_points keyword argument that is used to dynamically create scripts from a provided Python function on install. If we crack open the existing manage.py and strip it down to its essentials, we can see it isn't really doing much: python import os import sys os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) It sets a default environment variable and then calls a function passing in the provided command line arguments. This can easily be turned into an entry point by simply making it a function inside our project. I typically add it to myproject/__init__.py like so: python import os import sys def manage(): os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) Now we adjust our setup.py to add the entry point: python setup( … -
Django - Referencing the User Model
There are 3 different ways to refer to the User model in Django. This post explains the differences and which approach to use. -
Offline messages for Django
Offline messages for Django django.contrib.messages is awesome. Its API surface is small, it’s fast and it does what it does really well. However, it sometimes happens that you would want to send messages to users outside the request-response cycle, for example from a background process or even from a post_save signal handler. Adding a full-blown notifications-and-messages-system is of course possible. Sending a one-off message to the user would be sufficient though, but there is no way to do this with Django’s messages framework. There are a few packages around solving this particular problem. Almost all of them solve this by saving undelivered messages in the database. My solution, django-user-messages follows the same approach, but contrary to many others it does not reimplement the message storage nor replace any other functionality of django.contrib.messages. It only adds a few additional utilities for adding messages (e.g. user_messages.api.info(...) instead of messages.info(...)) and a context processor which concatenates Django’s messages with those provided by django-user-messages. Instead of passing the request to messages.info(...) you would pass a user instance, or even only a user ID to api.info(...). Easy enough, and works well. Despite the 0.5 version number the package has been stable and essentially unchanged since … -
3rd Party Haar Cascades in OpenCV
Building on [face recognition ... -
How to add a watermark with overlays using OpenCV & Python
Creating a watermark with Open... -
Demystifying encodings — part 3
Do you ever have trouble with encodings? I used to in the past, but now I rarely do, because I do a simple thing. While knowing the things I explained in part 1 and part 2 of this series is necessary, otherwise I wouldn’t be able to fix problems, such problems rarely arise, because the first thing I do when I setup a GNU/Linux machine is set the system locale to UTF-8. The “locale” is the regional settings, among which the character encoding used. The procedure to set it up is this: Open the file /etc/locale.gen in an editor and make sure the line that begins with “en_US.UTF-8” is uncommented. Enter the command locale-gen; this will (re)generate the locales. Open the file /etc/default/locale in an editor, and make sure it contains the line LANG=en_US.UTF-8. Changes in this file require logout and login to take effect. Let me now explain what all this is about. The locale consists of a language, a country, and a character encoding; “en_US.UTF-8” means English, United States, UTF-8. This tells programs to show messages in American English; to format items such as dates in the way it’s done in the United States; and to use encoding … -
OpenCV & Python: Face Recognition and Identification
I'm really starting to enjoy w... -
Save an Auto Generated PDF File to Django model
To save a auto-generated PDF f...