The Django shell provides an environment where developers can interact with the database via Django's ORM. While the shell is great for basic interactions, it quickly becomes laborious to work in, be it due to manual imports, having to scroll through shell history to repeat commands, or working with / viewing queries returning more than, say, 20 records. These issues, and more, can be remedied by interacting with the ORM in Jupyter notebooks, using Pandas.
Two very important (and overlooked) requirements for a new website vendor relationship
In the world of web development, particularly open source web development, there are two fundamental requirements that you should ask of any new web development vendor – code isolation and server isolation. Whenever possible, you must insist that the underlying code that runs your website is isolated and under your...
Guide to Ansible/NGINX/uWSGI/Django, Part 2: Getting uWSGI Working with NGINX and Django
In Part 1 of this post, I described the trials, tribulations and ultimate success of running Ansible to provision a cloud server, which we do often here at Imaginary Landscape. Part 2 concludes the post by describing the process for getting uWSGI working with NGINX and Django. When I first tested the...
Guide to Ansible/NGINX/uWSGI/Django, Part 1: Running the Ansible Scripts
Here at Imaginary Landscape, we are frequently tasked with spinning up new cloud servers for our clients. Once a new server is online, we usually follow up by provisioning it with useful software. To automate that process, we began using Ansible a few years ago, and have had a lot...
Step-by-Step Guide to Setting up Django-RQ
Modern websites are complicated pieces of machinery. The requests they initiate can be intensive and take more time to complete than a typical HTTP request-response cycle. This is typically refererd to as a blocking request, in that the browser (and user) waits until the response is received. If the request...
Scraping pdf, doc, and docx with Scrapy
In February 2017, Google announced its plans to discontinue its Google Site Search product. Those clients of Imaginary Landscape who had relied on Google to provide their users with a search engine service for their website looked to us for a new solution. Finding no obvious equivalent replacement, we decided to create our own website scraper and accompanying search app.
Continuous Integration and Deployment with Drone, Docker, Django, Gunicorn and Nginx - Part 3
Django Web Development, Django Web Framework, Integration and Deployment with Drone, Docker, Django, Gunicorn and Nginx
The case for a Django upgrade
It boils down to this. An upgrade costs money, sometimes a lot of money, but the result has no visible outcome. In fact, in many cases the only outcome is an assurance that you've reduced the probability of attack, intrusion, breach and related unpleasantness. By any measure, that's a tough...
Free and Auto-Renewing SSL Certificates: Letsencrypt Quick Setup (2017 Edition)
You may have have heard of Letsencrypt, which is a new SSL certificate authority that provides free SSL certificates that are supported in all modern browsers. This service is also designed to help automate the issuance of SSL certificates. The following describes how to use Letsencrypt to configure auto-renewing SSL certificates...
Imaginary Landscape Ranked Among the Top Five Chicago Web Development Companies by Clutch
Imaginary Landscape Ranked Among the Top Five Web Developers in Chicago and Among the Top Python and Django Web Developers Worldwide.
New Top 10 List of the Most Critical Security Risk to Web Applications, Is Your Application Vulnerable?
Independent OWASP Top 10 Security Risk Audit for Python-based Websites.
Django Version Viewer Announcement
Django Verison Viewer, Django Plugin, Open source Django Plugin
Continuous Integration and Deployment with Drone, Docker, Django, Gunicorn and Nginx - Part 2
The Introduction This is the second part of a multi-part tutorial covering a simple(ish) setup of a continuous integration/deployment pipeline using Drone.io. Since Part 1, I’ve added a GitHub project outlining a simple Django application that you can use as a reference. In Part 2, we will be adding a publish step...
Let's Encrypt with Alternative ACME Client
I recently was tasked with installing Let’s Encrypt on a server running an old version of Debian (Squeeze) which was due to have its certificate expire. Unfortunately, this meant following the path of setting up certbot and a cron job as outlined in Let's Encrypt Quick Setup -- which basically follows the...
Continuous Integration and Deployment with Drone, Docker, Django, Gunicorn and Nginx - Part 1
Integration and Deployment with Drone, Docker, Django, Gunicorn and Nginx
Don't Wait for the Lawsuit - Make Your Website Accessible Now
Although no formal set of guidelines have been released, website owners are encouraged to immediately comply with level A and AA of the Web Content Accessibility Guidelines as published by the World Wide Web Consortium. Aggressive law firms have had success bringing suit against organizations whose websites are not...
Writing Functional Python
The recent buzz surrounding Functional Programming (FP for short) is well deserved. Languages like Haskell and Clojure in use by big name companies such as Barclays Captial, Atlassian, and Walmart have helped FP ideas gain a major foothold in industry. I am a Clojurist hobbyist who has been interested in FP for...
3 Easy Ways to Prevent User Frustration with Good UX Design
Recently I enrolled in an online UX course through springboard.com. With the help of videos, articles, projects, and the support of a seasoned UX mentor who works in the field, I’ve come to learn a lot about how to develop good UX. But just as important, I’ve learned what makes...
Free and Auto-Renewing SSL Certificates: Letsencrypt Quick Setup
You may have have heard of Letsencrypt, which is a new SSL certificate authority that provides free SSL certificates that are supported in all modern browsers. This service is also designed to help automate the issuance of SSL certificates. The following describes how to use Letsencrypt to configure auto-renewing SSL certificates...
End User Focused Django Tutorials
Django is being used by corporations worldwide. Every day, Imaginary does its part to increase this footprint by deploying Django websites and applications to our clients. As a result, Django is being exposed to greater numbers of end users. I'm not talking end user developers. I'm talking Samantha in marketing...
How to Use Amazon S3 Storage for Select Apps
At Imaginary Landscape, we often have the need to add remote file storage capabilities for our clients. At first glance, this sounds easy enough: "pip install django-storages", add the right credentials, and boom, you're done! However, this was not the case for one particular situation we encountered. We didn't want...
Braintree Integration with Django
Braintree Integration in Django Introduction Much has been written about how to implement online payment using the services available from Braintree, but not much has been written about how to do it within a Django framework. Combining the two does not require any special contortions, but as Braintree’s own online...
Django Class-Based Views: The Basics
Class-based views are my favorite feature of Django, so there is an obvious bias when discussing function views and class-based views. I’ll throw my two cents in here and move on. I prefer the structure and predictability that class-based views provide. I recognize that there are many instances when a...
Django CMS Plugin Authenticated User Variations
Note: a companion app for this post can be found here: https://github.com/ImaginaryLandscape/cmsplugin-auth-content-example In a recent project using django CMS, we found ourselves in need of serving alternate plugin content to authenticated users. This is not the first time a request such as this has been made, and on past occasions...