Hello,
I once was once lured to an ideal of long-term stability and retrocompatibility, by nice docs like this one :
https://docs.djangoproject.com/en/dev/misc/api-stability/
But for some years, stuffs have actually been getting worse and worse, with each django release bringing its little crowd of nightmares.
In random order, I stumbled upon:
- removal of django.conf.urls.defaults
- removal of markup contrib lib (adios built-in RST support)
- removal of request.raw_post_data (thus breaking about all existing webservice libs)
- lots of changes in mandatory settings, like allowed_hosts or DB conf format,
- future removal of the very basic "mimetype" argument from django objects (how many apps impacted ? quite MANY I guess)
- future removal of request.REQUEST (aka "we're not all consenting adults, let's remove all tools that people could misuse")
I don't get this relentlessness at breaking, for the sake of purity, all stuffs that are not actively maintained, yet could be perfectly working.
What is easier, in a deeply dynamic language like python, than keeping retrocompatibility ?
Why not keep "raw_post_data" as an undocumented alias for "body" ? Why not keep "mimetype" as a silent alias for "content_type" ?
What harm did the "markup" support in django, since no one expects such extensions to be 100% secure anyway (no software on earth is) ? If code "purity" is wanted, then why not have all these monkey-patched from a builtin, but removable, "django.compatibility" util ? Why not wait for 2.0, to remove all compatibility aliases in one single shot ?
The one killing features of django is its app ecosystem - being able to plug blogs, authentication systems, webservice generators, and all other kinds of applications, into this common framework, and benefit from the common auto-admin. And since all these apps don't evolve at the same rythm, retrocompatibility is IMHO a NECESSITY for django, not a LUXURY. Or isn't it ?
Please don't kill the ecosystem, please respect the promises of api-stability that were once made.....
Apologies if this does not directly address your points, but I recently took over a Django site still running 1.1. I brought it fully up to 1.6 in under 2 hours work, including rearranging the project structure, updating settings, URL tags, import paths, switching to pip from buildout etc. Considering the version of Django this was written for is five years old I consider this an impressive achievement in backwards compatibility.
On another note, given Django's slow release cycle, deprecated features are visible if you run with warnings for between 18 months and 2 years before they stop working. I don't think it is unreasonable to expect a small amount of maintenance within these time frames.
As the Django ecosystem is aging, it is sadly inevitable that some unmaintained projects will stop working. The only way Django could avoid this is complete stagnation which would kill Django much more than the small maintenance burden it imposes.
Django remains one of the most stable web frameworks out there, but it must also continue to evolve or risk being IE6.
--
You received this message because you are subscribed to the Google Groups "Django developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-develop...@googlegroups.com.
To post to this group, send email to django-d...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-developers.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/CAG_XiSDBkbqrk0XFhdTFjMGsZmggE4RP31WjXQBew5wadm%2BOUg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
In random order, I stumbled upon:
- removal of django.conf.urls.defaults
- removal of markup contrib lib (adios built-in RST support)
- removal of request.raw_post_data (thus breaking about all existing webservice libs)
- lots of changes in mandatory settings, like allowed_hosts or DB conf format,
- future removal of the very basic "mimetype" argument from django objects (how many apps impacted ? quite MANY I guess)
- future removal of request.REQUEST (aka "we're not all consenting adults, let's remove all tools that people could misuse")
For example, I had great fun installing django + djangocms + zinnia + cms_plugin_zinnia ; the probability of having no version mismatch between all these components being more or less zero.
I don't get this relentlessness at breaking, for the sake of purity, all stuffs that are not actively maintained, yet could be perfectly working.
What is easier, in a deeply dynamic language like python, than keeping retrocompatibility ? Why not keep "raw_post_data" as an undocumented alias for "body" ? Why not keep "mimetype" as a silent alias for "content_type" ?
What harm did the "markup" support in django, since no one expects such extensions to be 100% secure anyway (no software on earth is) ?
If code "purity" is wanted, then why not have all these monkey-patched from a builtin, but removable, "django.compatibility" util ? Why not wait for 2.0, to remove all compatibility aliases in one single shot ?
The one killing features of django is its app ecosystem - being able to plug blogs, authentication systems, webservice generators, and all other kinds of applications, into this common framework, and benefit from the common auto-admin. And since all these apps don't evolve at the same rythm, retrocompatibility is IMHO a NECESSITY for django, not a LUXURY. Or isn't it ?
--
You received this message because you are subscribed to the Google Groups "Django developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-develop...@googlegroups.com.
To post to this group, send email to django-d...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-developers.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/6abfd1ee-0056-41c1-b079-f89f2f463cf5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
# Worst case scenario you'll have to un-install current version and Install a specific version.
$\> pip uninstall Django
$\> pip install Django==1.4.14
More work to upgrade a bunch of virtuaenv's, but not as much as keeping all sites current, don't break your eco-system, unless there's a reason.
It's wise to choose a balance best practices that suit your eco-system.
I'd thank the team for issuing security releases for old versions.
I think it was more distraction by topics he had not come across. We
set him off by saying "look at the release notes, go thru each change
in turn, see if we are affected and what we need to fix it".
The problem then was that he was new. He hadn't had to deal too much
with TZ support, so adding TZ support to our project meant a day of
learning about how TZ work in UNIX.
Similarly, changing the project layout is a good thing, but then he
spent a day learning about package layouts - not a bad thing by any
means, but in the 1.3 -> 1.4 release there are 75 similarly complex
enhancements/deprecations/incompatibilities - it just takes some time
to go through if you have not come across that topic before, eg,
clickjacking.