Download - Django Worst Practices

Transcript
Page 1: Django Worst Practices

Django Worst PracticesDaniel Greenfeld

Tuesday, April 19, 2011

Page 2: Django Worst Practices

Django Worst Practices

Whole project in one app

Tuesday, April 19, 2011

Page 3: Django Worst Practices

Django Worst Practices

Whole project in one app

All your stuff in one place!

Tuesday, April 19, 2011

Page 4: Django Worst Practices

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

Page 5: Django Worst Practices

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

Page 6: Django Worst Practices

Django Worst Practices

Database Choices

Tuesday, April 19, 2011

Page 7: Django Worst Practices

Django Worst Practices

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

Database Choices

Tuesday, April 19, 2011

Page 8: Django Worst Practices

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

Page 9: Django Worst Practices

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

Page 10: Django Worst Practices

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

Page 11: Django Worst Practices

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

Page 12: Django Worst Practices

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

Page 13: Django Worst Practices

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

Page 14: Django Worst Practices

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

Page 15: Django Worst Practices

Django Worst Practices

Put critical business logic in...

Tuesday, April 19, 2011

Page 16: Django Worst Practices

Django Worst Practices

• The templates

Put critical business logic in...

Tuesday, April 19, 2011

Page 17: Django Worst Practices

Django Worst Practices

• The templates

• settings

Put critical business logic in...

Tuesday, April 19, 2011

Page 18: Django Worst Practices

Django Worst Practices

• The templates

• settings

• The context processors

Put critical business logic in...

Tuesday, April 19, 2011

Page 19: Django Worst Practices

Django Worst Practices

• The templates

• settings

• The context processors

• Middleware!

Put critical business logic in...

Tuesday, April 19, 2011

Page 20: Django Worst Practices

Django Worst Practices

Use metaclasses instead of abstract models!

Tuesday, April 19, 2011

Page 21: Django Worst Practices

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

Page 22: Django Worst Practices

Django Worst Practices

Present usingDifferent fonts

Dark textDire backgrounds

Tuesday, April 19, 2011

Page 23: Django Worst Practices

Django Worst PracticesDon’t use

http://djangopackages.com

Invent everything yourself!

Tuesday, April 19, 2011