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

I am just starting with woven. I couldn't find a simple example how to get the values from a submitted form. Reading the HOWTOs and searching the twisted mail archives as well as web didn't bring up what I was searching for. An example: 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" id="Text1"/><br/> Text2: <input type="text" id="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)) 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? Thanks Mike

At 05:16 09.01.2004 +0100, I wrote:
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

At 05:16 09.01.2004 +0100, I wrote:
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
participants (1)
-
Mike Mueller