Inside the Head of PyDanny

Hi, I'm Daniel Roy Greenfeld, and welcome to my blog. I write about Python, Django, and much more.

Stop Using Executable Code Outside of Version Control

There's an anti-pattern in the development world, and it's for using executable code as a means to store configuration values. In the Python universe, you sometimes see things like this in settings modules:

# Warning: This is an anti-pattern!
try:
    from .local_settings import *
except ImportError:
    pass

What people do ...

Read more ...


Read other things I've written

Stop Using Executable Code Outside of Version Control
2018-08-26 16:00

Authenticating via JWT using Django, Axios, and Vue
2018-04-21 16:00

Writing A New Blog Engine
2018-03-29 16:00

Implemementing Manual Schema with Django REST Framework
2018-02-01 20:00

When to Use MongoDB with Django
2018-01-26 20:00

Hola, PyCon Colombia!
2018-01-19 20:00

Use Bitcoin to Get Two Scoops of Django at 25% Off
2018-01-09 01:00

2018 New Years Resolutions
2018-01-04 18:00

Two Scoops of Django Birthday Giveaway
2017-07-24 15:00

Two Scoops of Django 1.11 Is Printed!
2017-07-13 15:00

Using Python and Google Docs to Build Books
2017-05-15 15:00

Python F-Strings Are Fun!
2017-04-27 00:05

Two Scoops of Django 1.11 is Out!
2017-04-26 00:05

Code, Code, Code
2016-05-28 17:00

Pretty Formatting JSON in the Django Admin
2016-05-26 17:00

How To Create Installable, Reusable Django Packages
2015-11-20 18:30

Intensive Django Training with the US Air Force
2015-11-03 09:00

Titlecasing Markdown Headers with Python
2015-09-12 09:00

Why Doesn't Python Have Switch/Case?
2015-06-09 18:00

Django Girls Ensenada 2015
2015-05-27 10:00

Markup Language Faceoff: Lists
2015-05-14 10:00

Two Scoops of Django 1.8 is Out!
2015-04-29 10:00

Punchline
2015-03-29 14:00

Phasing Out Django Packages APIv1 & APIv2
2015-03-01 12:00

Setting up LaTeX on Mac OS X
2015-02-22 14:00

Python Decorator Cheatsheet
2015-02-13 18:20

Building Conda Packages for Multiple Operating Systems
2015-01-29 18:00

I did an Au Batido in 2014, now what?
2014-12-20 12:00

setup.py tricks
2014-12-19 12:00

Homemade Pumpkin Puree
2014-10-24 9:00

Adding Django form instance attributes
2014-09-15 10:30

Announcing BarCamp Django SF!
2014-09-12 13:00

Hola, Argentina!
2014-08-13 13:00

Want to work for Eventbrite? (part 2)
2014-07-23 13:00

Want to work for Eventbrite?
2014-07-23 12:00

Building, Maintaining and Scaling Projects
2014-07-15 14:30

cached-property: Don't copy/paste code
2014-07-01 12:00

Jinja2 Quick Load Function
2014-06-12 09:00

Python Partials are Fun!
2014-04-24 09:00

Beginner's Guide to PyCon 2015
2014-04-05 05:00

Surgery in Two Days
2014-04-02 05:00

Two Scoops of Goblins
2014-04-01 05:00

Memories of Malcolm
2014-03-17 12:00

Docstrings and Various Python Objects
2014-03-05 12:00

Fiction vs Non-Fiction
2014-02-24 01:00

Announcing Two Scoops of Django 1.6!
2014-02-05 01:00

awesome-slugify: Human-readable URL slugs from any string (part 2)
2014-01-22 12:00

awesome-slugify: Human-readable URL slugs from any string
2014-01-21 12:00

pytest: no-boilerplate testing (part 3)
2014-01-17 12:00

pytest: no-boilerplate testing (part 2)
2014-01-16 12:00

pytest: no-boilerplate testing
2014-01-15 12:00

I Married Audrey Roy
2014-01-04 09:30

New Year's Resolutions for 2014
2014-01-01 12:00

Cookiecutter: Project Templates Made Easy
2013-8-17 12:00

Made Up Statistics
2013-7-26 16:00

Travel Tips for Geeks: Preventing Theft
2013-7-18 16:00

My experiences with Django and Python 3
2013-7-11 16:00

EuroPython Intro to Django Workshop
2013-7-01 16:00

Core Concepts of Django ModelForms
2013-6-13 15:33

Tools we used to write Two Scoops of Django
2013-5-03 10:00

Filepicker.io and South
2013-4-23 10:00

Off to Europe!
2013-4-20 09:00

Two Scoops of Django is in print!
2013-4-17 09:00

Generating NCX files with Python
2013-4-15 09:00

Annotated History of My Most Used Shell Commands
2013-4-10 09:00

Fixing Python's String class
2013-4-01 00:01

Core Concepts of Django Forms
2013-3-29 11:00

Overloading Django Form Fields
2013-3-27 09:00

New Year's Meme 2013
2013-12-31 18:00

Exceptions as Decorator Arguments
2013-12-24 13:15

Python Indie Bundle Cyber Monday Sale
2013-12-02 14:00

Python Yields are Fun!
2013-11-22 14:00

Dynov 2013 Part I
2013-09-09 12:00

Travel Tips for Geeks: Traveling Cheaply
2013-08-05 14:00

The Easy Form Views Pattern Controversy
2013-05-10 12:00:00

PyCon Tutorial: Wiring Up Django Packages
2013-03-8 11:00

Beginner's Guide to PyCon 2013 Part III
2013-03-10 23:50

We are not using PayPal
2013-03-02 9:00

Two Scoops of Django 1.5 Beta Released
2013-02-28 15:00

Beginner's Guide to PyCon 2013 Part II
2013-01-23 16:00

Beginner's Guide to PyCon 2013 Part I
2013-01-22 16:00

Two Scoops of Django FAQ
2013-01-21 16:00

Our Django Book Has Launched
2013-01-17 10:00

New Year's Resolutions for 2013
2012-12-31 10:45

2012 resolution summary
2012-12-30 10:00

New Year's Python Meme 2012
2012-12-28 18:00

Result of our LA Migration Hackathon submission
2012-12-09 15:00

Developer Time
2012-12-04 12:00

Stay with the Django CBV defaults!
2012-11-27 16:00

Thoughts on ranting
2012-11-26 16:00

Case Study: URL Design for petcheatsheets.com
2012-11-21 22:00

Django GetOrCreateView
2012-10-16 22:00

Los Angeles Open Source Sprint on Nov 4th!
2012-10-14 14:00

We need more PyCon US 2013 submissions!
2012-09-27 18:00

Installing Pycairo on Mountain Lion
2012-09-04 10:30

Thoughts on my stack
2012-09-04 10:30

Python dictionary as a class
2012-09-01 01:00

A Public Service Message to the Python Community
2012-08-20 14:00

PyCon 2013 Talks/Tutorials I want to see
2012-08-20 14:00

Python dictionary vs JavaScript object: Dynamic Keys
2012-08-19 3:00

Django Requirements 2012-08-15
2012-08-15 18:00

Curiosity has landed!
2012-08-06 08:00

Deadline for DjangoCon Financial Aid requests is tomorrow!
2012-08-02 21:30

Attaching custom exceptions to functions and classes
2012-08-02 09:30

Django Update View without slug in the url
2012-07-28 09:30

July 15th, 2012 LA Open Source Recap
2012-07-16 18:00:00

Simple HTTP Basic Auth Wall
2012-07-09 12:00:00

PyCon Philippines 2012 Day 2
2012-07-05 12:00:00

PyCon Philippines 2012 Day 1
2012-07-03 12:00:00

Announcing PyCon Philippines!
2012-06-09 12:00:00

Django Class Based View: email form with CAPTCHA
2012-05-23 09:30

Simple Django email form using CBV
2012-05-22 09:30

May 12th, 2012 LA Open Source Recap
2012-05-21 09:30

10 reasons to go to DjangoCon Europe
2012-05-14 19:30

CSS Hacking to make my code samples legible
2012-05-11 08:30

Choosing an API framework for Django
2012-05-10 08:00

Django Requirements 2012-08-15
2012-08-15 18:00

Los Angeles Open Source Sprint on May 12th!
2012-05-01 09:20

Join us at DjangoCon Europe!
2012-04-10 12:00

Choosing a new python based blog engine
2012-04-05 12:00

Calendar About Nothing
2012-03-28 11:30

Launching our API at PyCon 2012
2012-03-09 07:30

The sorry state of Python OAuth providers
2012-03-05 07:30

You should Heroku
2012-02-28 12:45

I use this
2012-02-25 12:45

PyCon Australia 2011 Review
2012-02-24 12:45

My PyCon 2012 Schedule
2012-02-22 09:00

Selected for PyCon StartUp Row
2012-02-21 01:00

Parsing MongoDB URI
2012-02-20 09:20

django-uni-form end of life
2012-02-18 01:00

Two years ago today
2012-02-17 09:20

Tried out Jekyll
2012-02-09 10:20

Content Copyright © 2012-2018 Daniel Greenfeld. Proudly harnessed by Mountain, powered by Flask, and rendered by Frozen Flask, all of which take great advantage of Python.