[Checkins] SVN: z3c.form/trunk/ Don't render 3xx responses
Martin Aspeli
optilude at gmx.net
Fri Feb 26 10:23:23 EST 2010
Log message for revision 109472:
Don't render 3xx responses
Changed:
U z3c.form/trunk/CHANGES.txt
U z3c.form/trunk/src/z3c/form/form.py
U z3c.form/trunk/src/z3c/form/form.txt
-=-
Modified: z3c.form/trunk/CHANGES.txt
===================================================================
--- z3c.form/trunk/CHANGES.txt 2010-02-26 15:12:48 UTC (rev 109471)
+++ z3c.form/trunk/CHANGES.txt 2010-02-26 15:23:23 UTC (rev 109472)
@@ -5,6 +5,10 @@
2.3.3 (unreleased)
------------------
+- Don't invoke render() when publishing the form as a view if the HTTP status
+ code has been set to one in the 3xx range (e.g. a redirect or not-modified
+ response) - the response body will be ignored by the browser anyway.
+
- Handle Invalid exceptions from constraints and field validators.
- Don't create unnecessary self.items in update() method of
Modified: z3c.form/trunk/src/z3c/form/form.py
===================================================================
--- z3c.form/trunk/src/z3c/form/form.py 2010-02-26 15:12:48 UTC (rev 109471)
+++ z3c.form/trunk/src/z3c/form/form.py 2010-02-26 15:23:23 UTC (rev 109472)
@@ -211,6 +211,11 @@
def __call__(self):
self.update()
+
+ # Don't render anything if we are doing a redirect
+ if self.request.response.getStatus() in (300, 301, 302, 303, 304, 305, 307,):
+ return u''
+
return self.render()
Modified: z3c.form/trunk/src/z3c/form/form.txt
===================================================================
--- z3c.form/trunk/src/z3c/form/form.txt 2010-02-26 15:12:48 UTC (rev 109471)
+++ z3c.form/trunk/src/z3c/form/form.txt 2010-02-26 15:23:23 UTC (rev 109472)
@@ -341,7 +341,62 @@
</body>
</html>
+The update()/render() cycle is what happens when the form is called, i.e.
+when it is published:
+ >>> print addForm()
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <body>
+ <form action=".">
+ <div class="row">
+ <label for="form-widgets-id">ID</label>
+ <input type="text" id="form-widgets-id"
+ name="form.widgets.id"
+ class="text-widget required textline-field"
+ value="" />
+ </div>
+ <div class="row">
+ <label for="form-widgets-name">Name</label>
+ <input type="text" id="form-widgets-name" name="form.widgets.name"
+ class="text-widget required textline-field"
+ value="" />
+ </div>
+ <div class="row">
+ <label for="form-widgets-gender">Gender</label>
+ <select id="form-widgets-gender" name="form.widgets.gender:list"
+ class="select-widget choice-field" size="1">
+ <option id="form-widgets-gender-novalue"
+ value="--NOVALUE--">no value</option>
+ <option id="form-widgets-gender-0" value="male">male</option>
+ <option id="form-widgets-gender-1" value="female">female</option>
+ </select>
+ <input name="form.widgets.gender-empty-marker" type="hidden"
+ value="1" />
+ </div>
+ <div class="row">
+ <label for="form-widgets-age">Age</label>
+ <input type="text" id="form-widgets-age" name="form.widgets.age"
+ class="text-widget int-field" value="20" />
+ </div>
+ <div class="action">
+ <input type="submit" id="form-buttons-add" name="form.buttons.add"
+ class="submit-widget button-field" value="Add" />
+ </div>
+ </form>
+ </body>
+ </html>
+
+Note that we don't actually call render if the response has been set to a 3xx
+type status code (e.g. a redirect or not modified response), since the browser
+would not render it anyway:
+
+ >>> request.response.setStatus(304)
+ >>> print addForm()
+
+Let's go back to a normal status to continue the test.
+
+ >>> request.response.setStatus(200)
+
Submitting an add form successfully
-----------------------------------
More information about the checkins
mailing list