web2 post/put examples
Does anyone have a simple example of processing either a post or put on the server side using web2? I've had no problem serving up web pages from a variety of sources (files, database backends). The changes needed to support data back fro the user -- undoubtedly a set of deferred methods in the right place -- escape me. Thanks. Mark
Hi Mark, On Tue, 17 Apr 2007 15:49:10 -0500, Mark Feldman <feldman+twisted-web@shinkuro.com> wrote:
Does anyone have a simple example of processing either a post or put on the server side using web2? I've had no problem serving up web pages from a variety of sources (files, database backends). The changes needed to support data back fro the user -- undoubtedly a set of deferred methods in the right place -- escape me. Thanks.
For POST, you could use resource.PostableResource, which will take care of parsing your run-of-the-mill form posting. Just subclass resource.PostableResource, and implement the "render" method. For PUT, and also for cases where your are POSTING non-form data, e.g., an XML payload, you need to subclass resource.Resource, implement the desired method (http_POST, http_PUT), and then hook the request.stream up to a processing chain. Example: from twisted.web2 import resource, stream class Foo(resource.Resource): _allowedMethods = ('POST', 'PUT') def _finished(self, result, request): # return some http.Response def _failed(self, reason, request): # return some http.Response def http_POST(self, request): def handleData(data): # process each chunk of data as it arrives # readStream will keep calling handleData until the # entire stream has been read. d = stream.readStream(request.stream, handleData) # these callbacks/errbacks will be called when readStream # has finished reading the stream. d.addCallbacks( self._finished, self._failed, callbackArgs=(request,), errbackArgs=(request,) ) # Catch any errors that occur in self._finished. d.addErrback(self._failed, request) return d def http_PUT(self, request): # Just handle things the same way POST does return self.http_POST(request) Hope this helps, L. Daniel Burr
participants (2)
-
L. Daniel Burr
-
Mark Feldman