Python

Django 1.8 Tutorial - 3. Adding Account Logins

The previous article cleaned up the UI and made the comment system work more like a comment system, but it has a glaring flaw: you could choose to post as any user. LOLz.

This small modification adds login and logout features. It does it the raw way rather than use the built-in classes, or the django-registration-redux library. This is just a temporary feature, an example to learn authentication.

That said, it does something a little different from what seems to be provided by Django: the login is embedded right in the page, where the form would have been.

Django 1.8 Tutorial

This is a series of tutorials about Django 1.8. I'm a Django newbie and these are, more or less, my learning notes. These differ a little from other tutorials because it's assumed you know how to program, but don't know Django well, and you have worked through other tutorials.

Older tutorials focus on writing code using the "functional style" Django, but these all try to use the classes, and favor generic idioms.

Django 1.8 Tutorial - 2. Polishing the App with Static Files, CSS, JS, etc.

The last article took several hours to write, so I'm going to take a break from writing and editing for a while. These tutorial posts will still happen, but they'll be harder to read.

The previous tutorial created a "comment system", and while it was a reasonable example of using ModelForms and generic View classes, it didn't look like a real comment system. This tutorial polishes the original and makes it more like a real web app.

Here's what it looks like:

It's still not "nice", but it's getting there.

Django 1.8 Tutorial - 1. A Minimal Application Made Using Generic Class Based Views

I'm not a Django expert. I'm a Django novice writing this document to help other novices. There are probably errors, and I welcome corrections.

This is an intermediate level document for people who know how to program, are fairly comfortable with Python, have done one or two Django tutorials, and know the Django file layout, but haven't really "gotten" Django or the generic View classes.

We will create a small web application with all the CRUD operations in around 120 lines. The tutorial emphasizes using the most generic names.

Sources are attached, below.

How to Add a REST API to an Existing Django Project

This is a note I wrote to myself about how to add Django REST Framwork to an existing project. It's in PDF format, for reading. I didn't have the time to create a real tutorial that builds up the API, or produce a really useful API. The intention is just to outline what parts get defined and how they work together.

Django error: Reverse for 'some-name' with arguments '(1,)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

A nice feature of the URL matching rules is that even if you have named arguments in the url(), like so:

 url(r'^items/(?P<pk>[0-9]+)/$', ItemDetailView.as_view(), name='item_detail'),

the system will accept a positional parameter, like so:

{% url 'item_detail' item.id %}

I was thinking that it was going to be particular about named parameters, and I was searching for information about passing named parameters to url, but it wasn't necessary. Once again, misdirected by an error message.

def fn(arg1,x=arg2,y=10,*args,**kwargs): GO PYTHON!

def fn(arg1,x=arg2,y=10,*args,**kwargs):

That's kind of ugly, but the design is elegant. With that declaration, the function supports positional arguments, required named arguments, optional arguments, an arbitrary number of additional unnamed arguments, and additional arbitrary named arguments.

It allows function calls to be simpler and more readable than they would be without this flexibility.

A CSV Reader for UTF-8 Files

I was using the Places to CSV plugin to dump my website visit logs, and needed to ingest this data. The problem was, the fields were in UTF-8... but when I tried to decode each line from str to unicode, the csv library wouldn't do its magic. The fix was to let the csv.reader read in the data as str (no encoding, just bytes), and then decode each field as utf-8, returning a unicode string. These unicode strings were returned as a list, just like csv.reader does.

Django URL Namespaces and Templates... kind of not pretty

So, I shouldn't admit it, but I'm a Django beginner. (I've done a lot of other frameworks, but Django is new to me.) It has a really nice feature to write URLs for you; you don't code URLs into the pages, but use a name to find a URL's associated pattern, and generate based on the pattern. It's really nice.

Python Operator Overloading

I was reading up on Django F() and Q(). I didn't know Python had operator overloading. They call it magic methods.

Magic Methods on Rafe Kettler

There's a pretty good tutorial at Treehouse.

But... a few memories of arguments about operator overloading surfaced, so I had to think about why Java rejected adding the feature to Java.

Are Doctests in Django 1.8 Failing to Run?

I don't know what's up, but I ran some old examples, and it looks like doctests aren't running when I do the "manage.py test" (or the one with a settings file).

Django Database Testing Unmanaged Tables with Migrations

The answer is here: Models inside tests - Django 1.7 issue.

The problem is that you have some tables that are not managed by Django. (They get called "legacy", but in my case, they weren't legacy but data imported from another system.)

Hating on HATEOAS a little bit, thinking about it a lot

I've been thinking about how to enable HATEOAS on this web app, and it is a mind-bender. Django isn't quite up to it - but it does have a key feature of named links and URL generation that seems like a requirement for HATEOAS. To do HATEOAS, links need to be elevated to a higher status in the system.

For one, on the web, links are very different from the way software internals are organized. In software, and also in URLs, we have hierarchies: paths to files, paths to APIs, hierarchies of objects, and nested data structures.

Python Cheatsheet

When I shift languages, I sometimes make cheatsheets to speed up the transition to the new keywords and syntax. There's only so much shelf space in the brain. This is one I made for Python.

Recreate a Dropped Table in Django Migrations

This is a somewhat embarrassing story, but one that's common enough that you can find it online: I dropped a table, and needed to recreate it, and I'm using those (grr) Django migrations.

The right way out of this mistake is to recover from a backup. But let's suppose I didn't have a recent backup of my development database... because I didn't.

Syndicate content