Django - the first five years

Post on 06-May-2015

15,821 views 3 download

Tags:

transcript

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

Thank you!jacob@jacobian.org