The first five years
Jacob Kaplan-Moss
Google, December 16, 2008http://jacobian.org/speaking/2008/first-five-years/
“”
Good software takes ten years. Get used to it.
— Joel Spolskyhttp://www.joelonsoftware.com/articles/fog0000000017.html
Halfway there!
http://flickr.com/photos/usonian/257403571/
Kansas
Merry Slickmas
The Dog and Pony Show
Hark! The Local Musicians Sing!: New Christmas albums from Sam
Billen and Josh Atkinson
Sam Billen’s “Merry Christmas” and Josh Atkinson’s “Songs for Christmas” rank right up
there with recent yuletide blessings from Sufjan Stevens and Low. Both albums strip away
Best bets Upcoming
Today's events Search events
"A Benefit for Charley's Finger" with The
Dactyls / Naomi What?
Charlie Downey is a baller. He's so badass that he
broke his finger in two places when one of his
shots got stuffed
Today at 10:00pm
The Jackpot Music Hall, $5
Staph blogs
O Caption! My Caption!
Loafers of Mass Destruction
13 comments
Scene Stealers
'Synecdoche, New York' tackles life’s
complexity with complexity
Events Latest Music Movies Food Nightlife
“”
In the beginning there was Zope. Zope was a web application framework ... but
it had some discontents who dared to call it "monolithic" and "unpythonic".
And behold, then there came Webware, and it was Modular.... But others
rebelled ... and a Ton of frameworks appeared: Quixote ... SkunkWEB ...
CherryPy ... and some thirteen others.
— Mike Orrhttp://linuxgazette.net/113/orr.html
2003
2008
r36 cms/apps/polls/
r84 cms/core/validators.py
r159 cms/core/paginator.py
r327 cms/apps/auth/
r390 cms/core/urlresolvers.py
r630 cms/core/sites.py
February 2004circa r1000
cms/apps/polls/poll.py
>>>fromcms.apps.polls.pollsimportPoll>>>p=Poll(4,"hi",date(2004,1,1),...)>>>p.save()
cms/apps/polls/polls.py
cms/apps/polls/polls.py
cms/apps/polls/dblayout.sql
httpd.conf
cms/conf/mrmustard/polls.py
cms/views/polls/polls.py
Data class Admin view
Data-access function(s) Admin template
Admin URLs
cms/datadescriptions/polls.py
./generate_code.pypolls
apps/polls.py
sql/polls.sql
views/admin/
polls.py
templates/admin/
polls/change_list.htmladd_form.htmlchange_form.html
cms/utilities/codegeneration/generation.py
cms/datadescriptions/polls.py
DONOTEDITTHISFILEMANUALLY.ITWASGENERATEDBYAPROGRAM.RE‐RUNTHECODEGENERATORINSTEAD.
Seven months later...October 2004
cms/models/polls.py
PyCon 2005
Rails
classPoll(meta.Model):fields=(meta.SlugField('slug','slug',unique_for_month='pub_date'),meta.CharField('question','question',maxlength=255),meta.DateTimeField('pub_date','datepublished'),meta.DateTimeField('expire_date','expirationdate'),meta.ManyToManyField(core.Site),meta.PositiveSmallIntegerField('choice_votes','choicevotes'),)
db_table=pollsordering=('‐pub_date',)get_latest_by='pub_date'
classPoll(meta.Model):slug=meta.SlugField(unique_for_month='pub_date')question=meta.CharField(maxlength=255)pub_date=meta.DateTimeField('datepublished')expire_date=meta.DateTimeField('expirationdate')sites=meta.ManyToManyField(core.Site)choice_votes=meta.PositiveSmallIntegerField(default=1)
classMETA:db_table='polls'ordering=('‐pub_date',)
“”— Adrian, August 2005
http://www.djangoproject.com/weblog/2005/aug/25/modelsyntax/
I can't think of any other backwards-incompatible
changes that we're planning before 1.0 (knock on wood). If this isn't the last one, though, it's at least the last major one.
Before:fromdjango.models.pollsimportPoll
After:frommyapp.modelsimportPoll
Before:...magic!...
After:importdatetime
Before:classPoll(meta.Model):classMETA:admin=meta.Admin(list_display=('title'),)
After:classPoll(meta.Model):classAdminlist_display=('title')
Before:fromdjango.models.pollsimportpollspolls.get_list(slug__exact='slug')
After:frompolls.modelsimportPollPoll.objects.filter(slug='slug')
339fileschanged,22290insertions(+),15656deletions(‐)
“”
After this merge, Django 1.0 can’t be far off.
— Bill de hÓrahttp://www.dehora.net/journal/2006/04/django_magic_merging.html
“0.95”
django.newforms
django.test
18 months
3,094 commits+ branches
1,370 from the community
230 new AUTHORS
2,120 bugs fixed
1,394fileschanged,28,3237insertions(+),97,036deletions(‐)
40,000 lines of new documentation
4 new full committers
Unicode
QSRF
NFA
GeoDjango
ModelForms
Autoescaping
Django on Jython(Thanks, Google!)
... and much more ...http://docs.djangoproject.com/en/dev/releases/1.0/
API stability & forwards-compatability
http://docs.djangoproject.com/en/dev/misc/api-stability/
Formal release processhttp://docs.djangoproject.com/en/dev/internals/release-process/
What’s next?
Django 1.1March 16, 2009
Django 1.1 Roadmaphttp://code.djangoproject.com/wiki/Version1.1Roadmap
ORM aggregationhttp://github.com/freakboy3742/django/tree/aggregation
>>>Book.objects.aggregate(...Avg('price'),...highest_price=Max('price'))
{'price_avg':45.0,'highest_price':82.80}
>>>Author.objects.aggregate(Sum('book__price'))
{'book_price_sum':442}
>>>books=Book.objects.annotate(Max('authors__age'))
>>>books[0].nameu'PythonWebDevelopmentWithDjango'
>>>books[0].authors.all()[<Author:JeffreyForcier>,<Author:PaulBissex>,<Author:WesleyJ.Chun>]
>>>books[0].authors__age__max37.0
Publisher.objects.annotate(num_books=Count('book__id'))\.filter(num_books__gt=1)\.order_by('num_books')
Improved QuerySet.update()
>>>Person.objects.update(age=F('age')+1)
Model Validationhttp://code.djangoproject.com/ticket/6845
>>>p=Person.objects.get(...)>>>p.age=‐7>>>p.save(validate=True)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>ValidationError:enteranumbergreaterthan0.
Bulk admin actionshttp://code.google.com/p/django-batchadmin/
Class-based generic views
fromdjango.views.genericimportDetailView
classPersonView(DetailView):queryset=Person.objects.all()defget_template(self,request):returnTemplate(...)
http://code.djangoproject.com/wiki/Version1.1Roadmap
... and more ...
Please help!http://code.djangoproject.com/wiki/Version1.1Roadmap#how-you-can-help