Tutorial part 4, just before generic views
Part 4, generic views
Part 5: testing (incomplete)