Django Worst Practices

Preview:

DESCRIPTION

Just to be clear, all of these things suck. Please DO NOT use these techniques! It was a joke, and if you attempt any of these things you are making a big mistake.

Citation preview

Django Worst PracticesDaniel Greenfeld

Tuesday, April 19, 2011

Django Worst Practices

Whole project in one app

Tuesday, April 19, 2011

Django Worst Practices

Whole project in one app

All your stuff in one place!

Tuesday, April 19, 2011

Django Worst Practices

Whole project in one app

All your stuff in one place!No need to worry about bugfixes or enhancements!

Tuesday, April 19, 2011

Django Worst Practices

pydanny: pwd/Users/pydanny/projects/enterprise/settingspydanny: ls -ltotal 24-rw-r--r-- 1 pydanny staff 0 Apr 18 22:38 __init__.pylrwxr-xr-x 1 pydanny staff 21 Apr 18 22:42 dev.py -> /Users/pydanny/dev.pylrwxr-xr-x 1 pydanny staff 22 Apr 18 22:42 prod.py -> /Users/pydanny/prod.pylrwxr-xr-x 1 pydanny staff 25 Apr 18 22:42 staging.py -> /Users/pydanny/staging.py

Symlink your settings folder!Cause you’ll remember to do this with each server setup...

Tuesday, April 19, 2011

Django Worst Practices

Database Choices

Tuesday, April 19, 2011

Django Worst Practices

• Use a relational database to store ill-defined hierarchical data!

Database Choices

Tuesday, April 19, 2011

Django Worst Practices

• Use a relational database to store ill-defined hierarchical data!

• Use NoSQL to store tabular data!

Database Choices

Tuesday, April 19, 2011

Django Worst Practices <%python scope="global"> # declare global variables, accessible # across this component's generated module message1 = "this is message one." message2 = "this is message two." message3 = "doh, im message three." </%python> <%python> # reference the global variables m.write("message one: " + message1) m.write("message two: " + message2) # we want to assign to message3, # so declare "global" first global message3 message3 = "this is message three." m.write("message three: " + message3) </%python>

Tuesday, April 19, 2011

Django Worst Practices

Who needs caching?

<%python scope="global"> # declare global variables, accessible # across this component's generated module message1 = "this is message one." message2 = "this is message two." message3 = "doh, im message three." </%python> <%python> # reference the global variables m.write("message one: " + message1) m.write("message two: " + message2) # we want to assign to message3, # so declare "global" first global message3 message3 = "this is message three." m.write("message three: " + message3) </%python>

Tuesday, April 19, 2011

Django Worst Practices

Who needs caching?

Performance awesomeness!

<%python scope="global"> # declare global variables, accessible # across this component's generated module message1 = "this is message one." message2 = "this is message two." message3 = "doh, im message three." </%python> <%python> # reference the global variables m.write("message one: " + message1) m.write("message two: " + message2) # we want to assign to message3, # so declare "global" first global message3 message3 = "this is message three." m.write("message three: " + message3) </%python>

Tuesday, April 19, 2011

Django Worst Practices

Who needs caching?

Performance awesomeness!

Replaces pesky django templates!

<%python scope="global"> # declare global variables, accessible # across this component's generated module message1 = "this is message one." message2 = "this is message two." message3 = "doh, im message three." </%python> <%python> # reference the global variables m.write("message one: " + message1) m.write("message two: " + message2) # we want to assign to message3, # so declare "global" first global message3 message3 = "this is message three." m.write("message three: " + message3) </%python>

Tuesday, April 19, 2011

Django Worst Practices

Who needs caching?

Performance awesomeness!

Replaces pesky django templates!

<%python scope="global"> # declare global variables, accessible # across this component's generated module message1 = "this is message one." message2 = "this is message two." message3 = "doh, im message three." </%python> <%python> # reference the global variables m.write("message one: " + message1) m.write("message two: " + message2) # we want to assign to message3, # so declare "global" first global message3 message3 = "this is message three." m.write("message three: " + message3) </%python>

Tuesday, April 19, 2011

Django Worst Practices

Use XSLT for awesome performance!

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/persons"> <root> <xsl:apply-templates select="person"/> </root> </xsl:template> <xsl:template match="person"> <name username="{@username}"> <xsl:value-of select="name" /> </name> </xsl:template> </xsl:stylesheet>

Tuesday, April 19, 2011

Django Worst Practices

Put critical business logic in...

Tuesday, April 19, 2011

Django Worst Practices

• The templates

Put critical business logic in...

Tuesday, April 19, 2011

Django Worst Practices

• The templates

• settings

Put critical business logic in...

Tuesday, April 19, 2011

Django Worst Practices

• The templates

• settings

• The context processors

Put critical business logic in...

Tuesday, April 19, 2011

Django Worst Practices

• The templates

• settings

• The context processors

• Middleware!

Put critical business logic in...

Tuesday, April 19, 2011

Django Worst Practices

Use metaclasses instead of abstract models!

Tuesday, April 19, 2011

Django Worst Practices

from django.db import models

blog2_fields = [

models.CharField(“title”, max_length=50),

models.TextField(“note”)

]

In settings:

Tuesday, April 19, 2011

Django Worst Practices

Present usingDifferent fonts

Dark textDire backgrounds

Tuesday, April 19, 2011

Django Worst PracticesDon’t use

http://djangopackages.com

Invent everything yourself!

Tuesday, April 19, 2011