[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