Am Donnerstag, 29. September 2016 18:55:37 UTC+2 schrieb Tim Graham:
>
> #1. Regarding templates, one of the arguments for the previous change was:
>
> Django 1.8 worsens the situation significantly:
>
>     {% if request.user.is_authenticated %}
>
> does the right thing in a Django template but is a security vulnerability 
> in a Jinja2 template!
>


Ah, yes. I for one think that this is just a minor issue as changing the 
underlying template engine is not done on a regular basis. But that might 
just be me.

If it contributes as an argument, why not. I don't see anything wrong with 
using is_valid/has_changed in templates especially when we need to display 
field errors.

 

> #2. There was an inconsistency with the is_staff, is_active, is_superuser 
> attributes and is_anonymous, is_authenticated as methods. I'm not sure what 
> the inconsistency is with forms. Yes, there's an Form.is_bound property and 
> an is_multipart() method but I don't see a need to convert all is_*() 
> methods to properties.
>
>
> In my mind, the security ramifications were the main reason for the 
> previous change, and I don't see those concerns here. Changing 
> Form.is_valid() to a property seems like it would cause much more 
> disruption across the Django ecosystem than the gain would be worth.
>


It's always the combination of several issues. Here are mine:

#1 Inconsistency
For newbies that's the hardest part; especially when now compared to 
is_authenticated and other boolean attributes/properties even within Django.


#2 Wasted Effort
Also on a regular basis; which is quite problematic for commercial 
projects. Focusing on the topic at hand is more important than such 
technical details.
The mentioned dev who missed the "()" is one of our most experienced devs 
and that mentioned piece of code is only 3 years old.


#3 "Errors should never pass silently."

Which they do if you write:

if form.is_valid:
    # will always be executed
    # as it is always true


#4 Django devs are not only Django devs

They are Python devs as well and usually Django as a single lib is not 
enough. Especially Python devs expect things to work the same also across 
most libs such as boolean attributes/properties.


You might not find them worth enough to warrant the trouble. I for one do, 
hence the post. But it's not me to decide. :)


Some related thought: relating Django's past lifetime with its projected 
future lifetime which still lies ahead, Django is still in its infancy. 
So, I guess that any change no matter how "disruptive" for the sake of 
consistency will eventually pay out. Latter generations will be grateful 
not to distinguish between situations where they need "()" and where they 
don't.

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers  (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at https://groups.google.com/group/django-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/e36d0f0a-fee8-4340-9d8a-24402dd55b76%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to