Django Worst Practices
-
Upload
daniel-greenfeld -
Category
Technology
-
view
11.293 -
download
2
description
Transcript of Django Worst Practices
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