[Twisted-Python] how to get form values in woven?

Mike Mueller pyp at gmx.net
Fri Jan 9 07:38:00 EST 2004


At 05:16 09.01.2004 +0100, I wrote:
>....
>
>There are several problems with this.
>
>1.) wchild_processMyForm gets called twice every time the submit button is hit
>2.) for the first call the method is post for, the second it is get
>3.) arg is always {}, so nothing to process
>
>Obviously, I am doing something wrong. Basically I just want to echo back 
>the name/values pairs that where entered into the form. How do I do this 
>with woven?


I took me while but I found the problems:

1.) <form action="processMyForm" method="post"> must be <form 
action="processMyForm/" method="post">
and
2.)  <input type="text" id="Text1"/> must be <input type="text" name="Text1"/>

The working script looks like this:

from twisted.application import service, internet
from twisted.web.woven import page
from twisted.web import server, resource


class FirstPage(page.Page):
     template = """<html>
         <head>
         <title>First Form</title>
         </head>
         <body>
           <h3>First Form</h3>
           <form action="processMyForm/" method="post">
           <p>
           Text1:
           <input type="text" name="Text1"/><br/>
           Text2:
           <input type="text" name="Text2"/><br/>
           <input type="submit" value="Send"/>
           </p>
           </form>
         </body>
       </html>
     """
     def initialize(self, *args, **kwargs):
         self.numberOfProcessCalls = 0
     def wchild_processMyForm(self, request):
         self.numberOfProcessCalls += 1
         keysValues = []
         for k, v in request.__dict__.items():
             keysValues.append('%s:\t %s' %(k,v))
         model = {'keys-values': keysValues,
                  'number':self.numberOfProcessCalls}
         return page.Page(model, template=
                          """<html>
                              <body>
                              Number of calls:
                              <p model="number" view="Text" />
                              <h3>arg keys: values</h3>
                              <div model="keys-values" view="List">
                                 <p pattern="listItem" view="Text" />
                              </div>
                              </body>
                              </html>""")


p = FirstPage()
application = service.Application('SimpleForm')
internet.TCPServer(8088, 
server.Site(resource.IResource(p))).setServiceParent(service.IServiceCollection(application))



Mike 





More information about the Twisted-Python mailing list