Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Djangocon: accessibility matters: building a better web - Lindsey Dragun
(One of my summaries of a talk at the 2018 european djangocon.) Lindsey runs the DisabledInTech slack channel. For Web accessibility, see https://www.w3.org/WAI/fundamentals/accessibility-intro/ as a good intro. There are standards to help with accessibility and for many government instances, they're mandatory. Disabilities are often grouped in: visual, auditory, motor/physical, cognitive/neurological, language/speech. There are other (more inclusive!) ways to group: permanent (born blind), temporary (like just being sick!), acquired (like ageing), societal (like lefthandedness). Notice how this comes much closer? There are alternative input/output tools. Braille displays, eye trackers, foot pedals instead of mouse buttons, etc. Important: think deeper. Categories can be desceptively simple. Users don't always fall into just one category. Examples. The web is sometimes like the letters at the eye doctor: "read the line with the smallest letters". Color contrast. il1: what is the I, what the L, what the number? Dislexia? Bad font? Make changes noticable. Feedback in forms, for instance. Which field contained the error? The above list might make it look like accessibility is easy. It often isn't. How do I implement accessibility? Avoid gimmicks. What's popular on the web isn't necessarily handy. Infinite scrolling in combination with a sidebar. When you scroll, you'll never … -
Djangocon: lightning talks wednesday
(One of my summaries of a talk at the 2018 european djangocon.) Lightning talks are quick 5 minute talks, so I won't have every detail and speaker name correctly :-) Adding multi-factor authentication to your django project - Justin Mayer Passwords are ubiquitous. Passwords are terrible. Solutions: sms (bad), TOTP, one-time passwords. U2F key. That one is great. It will also be a standard in browsers. There's django-u2f to help you with it. He managed to get a demo working within 5 minutes! Instant feedback - Johannes Hopper Making reviews (on pull requests) great again with the new "github checks". What is tedious as a maintainer are the small tasks like "could you remove the trailing spaces". With "github checks", you can let a linter do that job and give the feedback to the user. Such feedback of a program is much less irritating to the person that created the pull requests than when you do it yourself. "Github checks" is a new (beta) feature. It is made for computer feedback. With a colleague, he set up a collection of linters, ready for integration with github. Hosted on AWS. If you're interested, contact him. (It is all open source, of … -
Official Django REST Framework Tutorial - A Beginners Guide
If you have struggled to complete the official tutorial on your own, consider this guide a good place to start instead. -
I'm in Heidelberg for the djangocon 2018 (plus other info)
Yes, I'm in Heidelberg (Germany) for the annual European djangocon. That's not a particularly shocking discovery, as I've been to quite a number :-) There are however some reasons for me to write this entry. The most important reason is that I've set up my old blog software on a brand new laptop. "Old software" means "python 2" and it is "python 3" now. And I've modernized the setup on my server a bit. So: this entry is my first test if my setup also works when writing a blog entry. That's not something I want to test when I'm making summaries tomorrow. New laptop? Two months ago I asked advice: mac/linux. Both had advantages. What I type this on is a linux laptop. A powerful Dell precision 5520! I'll probably write about my new setup later :-) New laptop? Yes, because of a new job. The company is also quite new (from February this year), it doesn't have a website yet: "Triple S transformations". I'd describe my job as senior developer with a big focus on python and open source. Triple S is part of VolkerWessels, the second biggest Dutch construction firm. Our aim is to replace expensive and … -
Using Braze so that marketers are not the developers’ nightmare
Braze is an external platform to send messages like emails, push notifications, in-app, sms, etc. The platform has two ways to send them: through an API or offers an SDK to integrate.You can store in Braze the user and products data that you need and use it in the messages to be sent. The platform offers the possibility to send messages at scale.Marketers can manage messages and their scheduling without relying on programmers.CampaignsMessages are sent through campaigns. Braze provides multiple scheduling options for campaigns. These alternatives allow you to send messages to users at the right time according to the needs.The first option is the Scheduled Delivery. Messages will be sent as soon as the campaign is launched, sending at a designated time (it allows to specify the days and hours the campaign will send the messages) or using the “Intelligent Delivery” (once, daily, weekly, monthly).The second option is Action-Based Delivery. Messages are sent when users perform actions. The trigger events can be starting a session, performing a custom event, performing a campaign’s conversion event, making a purchase, interacting with other campaigns, among others. For this option you can select how long to wait before sending the campaign. The campaign’s … -
Taming Irreversibility with Feature Flags (in python)
Feature Flags are a very simple technique to make features of your application quickly toggleable. The way it works is, everytime we change some behavior in our software, a logical branch is created and this new behavior is only accessible if some specific configuration variable is set or, in certain cases, if the application context respects some -
Best Django Books 2018
List of current Django 2.0 books. -
How To Deploy Django Channels To Production
In this article, we will see how to deploy django channels to production and how we can scale it to handle more load. We will be using nginx as proxy server, daphne as ASGI server, gunicorn as WSGI server and redis for channel back-end. Daphne can serve HTTP requests as well as WebSocket requests. For stability and performance, we will use uwsgi/gunicorn to serve HTTP requests and daphne to serve websocket requests. We will be using systemd to create and manage processes instead of depending on third party process managers like supervisor or circus. We will be using ansible for managing deployments. If you don't want to use ansible, you can just replace template variables in the following files with actual values. Nginx Setup Nginx will be routing requests to WSGI server and ASGI server based on URL. Here is nginx configuration for server. server { listen {{ server_name }}:80; server_name {{ server_name }} www.{{ server_name }}; return 301 https://avilpage.com$request_uri; } server { listen {{ server_name }}:443 ssl; server_name {{ server_name }} www.{{ server_name }}; ssl_certificate /root/certs/avilpage.com.chain.crt; ssl_certificate_key /root/certs/avilpage.com.key; access_log /var/log/nginx/avilpage.com.access.log; error_log /var/log/nginx/avilpage.com.error.log; location / { proxy_pass http://0.0.0.0:8000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; } … -
How To Deploy Django Channels To Production
In this article, we will see how to deploy django channels to production and how we can scale it to handle more load. We will be using nginx as proxy server, daphne as ASGI server, gunicorn as WSGI server and redis for channel back-end. Daphne can serve HTTP requests as well as WebSocket requests. For stability and performance, we will use uwsgi/gunicorn to serve HTTP requests and daphne to serve websocket requests. We will be using systemd to create and manage processes instead of depending on third party process managers like supervisor or circus. We will be using ansible for managing deployments. If you don't want to use ansible, you can just replace template variables in the following files with actual values. Nginx Setup Nginx will be routing requests to WSGI server and ASGI server based on URL. Here is nginx configuration for server. server { listen {{ server_name }}:80; server_name {{ server_name }} www.{{ server_name }}; return 301 https://avilpage.com$request_uri; } server { listen {{ server_name }}:443 ssl; server_name {{ server_name }} www.{{ server_name }}; ssl_certificate /root/certs/avilpage.com.chain.crt; ssl_certificate_key /root/certs/avilpage.com.key; access_log /var/log/nginx/avilpage.com.access.log; error_log /var/log/nginx/avilpage.com.error.log; location / { proxy_pass http://0.0.0.0:8000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; } … -
Debugging Python Applications with pdb
Debugging isn’t a new trick – most developers actively use it in their work. Of course, everyone has their own approach to debugging, but I’ve seen too many specialists try to spot bugs using basic things like print instead of actual debugging tools. Or even if they did use a debugging tool, they only used a small set of features and didn’t dig deeper into the wide range of opportunities good debuggers offer. And which could have saved those specialists a lot of time. Debugging Python with the Print Command As mentioned above, some of us use ‘print’ to display information that reveals what’s going on inside the code. Some of us use a logger for the same purpose – but please don’t confuse this with the logger for the production code, as I’m referring to developers that only add the logger during the problem searching period, i.e. just until the developing process ends. But the truth is, print has a lot of loopholes. Probably, its biggest drawback is that you have to add changes to your code, then re-run the application to see the different variable you’re writing, or the current variable type, for example. So how is a … -
Django Channels 2.0 to Production Environment
Learn how to deploy a Django C... -
New Course: Creating and Distributing Python Packages
Myself and Audrey Roy Greenfeld have released a course, Creating and Distributing Python Packages. Features it includes: Covers Python packaging details including setup.py, not to mention automating things like testing, versioning, documentation, dependency management, and checking for security issues. Available in English or Spanish. Demonstrates Cookiecutter and Cookiecutter PyPackage. Will help fund our open source work in a way that doesn't involve us directly asking people for money (because we suck at that). Who is this course good for? Do you have a script, function, class, or snippet of code you copy/paste from project to project? If that's the case, this course is for you. We'll teach you how to package that up and add automated tests, documentation, and so much more. This especially applies to organizations that share code between projects. If you are copy/pasting common code that means updating it across projects is challenging and error prone, introducing the risk of bugs and security concerns. Plus, odds are it's not tested reliably. By packaging your copy/pasting code and adding automation, it becomes just another dependency, easily updated across multiple projects. Or what if you have an API that needs a Python client SDK? If that's the case, then … -
Always return namespaces in Django REST Framework
By default, when you hook up a model to Django REST Framework and run a query in JSON format, what you get is a list. E.g. For GET localhost:8000/api/mymodel/ [ {"id": 1, "name": "Foo"}, {"id": 2, "name": "Bar"}, {"id": 3, "name": "Baz"} ] This isn't great because there's no good way to include other auxiliary data points that are relevant to this query. In Elasticsearch you get something like this: { "took": 106, "timed_out": false, "_shards": {}, "hits": { "total": 0, "hits": [], "max_score": 1 } } Another key is that perhaps today you can't think of any immediate reason why you want to include some additonal meta data about the query, but perhaps some day you will. The way to solve this in Django REST Framework is to override the list function in your Viewset classes. Before # views.py # views.py from rest_framework import viewsets class BlogpostViewSet(viewsets.ModelViewSet): queryset = Blogpost.objects.all().order_by('date') serializer_class = serializers.BlogpostSerializer After # views.py from rest_framework import viewsets class BlogpostViewSet(viewsets.ModelViewSet): queryset = Blogpost.objects.all().order_by('date') serializer_class = serializers.BlogpostSerializer def list(self, request, *args, **kwargs): response = super().list(request, *args, **kwargs) # Where the magic happens! return response Now, to re-wrap that, the response.data is a OrderedDict which you can change. Here's … -
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+ …