Python Lover(7)Twisted Basic - Error Handling, Post, rpy Scripts

Python Lover(7)Twisted Basic - Error Handling, Post, rpy Scripts

1. Error Handling
http://twistedmatrix.com/documents/current/web/howto/web-in-60/error-handling.html

from twisted.web.server import Site
from twisted.web.resource import Resource
from twisted.internet import reactor
from twisted.web.resource import NoResource

from calendar import calendar

class Calendar(Resource):
    def getChild(self, path, request):
        try:
            year = int(path)
        except ValueError:
            return NoResource()
        else:
            return YearPage(year)

class YearPage(Resource):
    def __init__(self, year):
        Resource.__init__(self)
        self.year = year

    def render_GET(self, request):
        return "<html><body><pre>%s</pre></body></html>" % (calendar(self.year),)

root = Calendar()
factory = Site(root)
reactor.listenTCP(8880, factory)
reactor.run()

2. Custom Response Codes
http://twistedmatrix.com/documents/current/web/howto/web-in-60/custom-codes.html

That is a total custom Resource.
from twisted.web.server import Site
from twisted.web.resource import Resource
from twisted.internet import reactor

class PaymentRequired(Resource):
    def render_GET(self, request):
        request.setResponseCode(402)
        return "<html><body>Please swipe your credit card.</body></html>"

root = Resource()
root.putChild("buy",PaymentRequired())
factory = Site(root)
reactor.listenTCP(8880, factory)
reactor.run()

3. Handling POSTs
http://twistedmatrix.com/documents/current/web/howto/web-in-60/handling-posts.html

from twisted.web.server import Site
from twisted.web.resource import Resource
from twisted.internet import reactor

import cgi

class FormPage(Resource):
    def render_GET(self,request):
        return """
        <html>
            <body>
                <form method="POST">
                    <input name="the-field" type="text" />
                </form>
            </body>
        </html>"""
    def render_POST(self, request):
        return """
        <html>
            <body>You submitted: %s</body>
        </html>
        """ % (cgi.escape(request.args["the-field"][0]),)

root = Resource()
root.putChild("form", FormPage())
factory = Site(root)
reactor.listenTCP(8888, factory)
reactor.run()

cgi is using here to deal with the request.args.

4. Other Request Bodies
http://twistedmatrix.com/documents/current/web/howto/web-in-60/other-request-bodies.html

Not the args attribute, but the content attribute.

We fetch the request body directly from request.content.
class FormPage(Resource):
    def render_POST(self, request):
        return """
        <html>
            <body>You submitted: %s</body>
        </html>
        """ % (cgi.escape(request.content.read()))

5. rpy scripts
http://twistedmatrix.com/documents/current/web/howto/web-in-60/rpy-scripts.html

rpy is a source file which defines a resource and can be loaded into a twisted web server.

The purpose of this is that we don’t have to write code to create the site or set up a listening port with the reactor.

Prepare the file RestAPI.rpy
import time

from twisted.web.resource import Resource

class ClockPage(Resource):
    isLeaf = True
    def render_GET(self, request):
        return """
        <html>
            <body>
                %s
            </body>
        </html>
        """ % (time.ctime(), )

resource = ClockPage()

Start the command
> twistd -n web --path .

Visit the page
http://localhost:8080/RestAPI.rpy

Tips:
Check and Install Twisted on ubuntu
Check my Python Version
> python -V
Python 2.7.3

Download the Source
> wget http://twistedmatrix.com/Releases/Twisted/15.4/Twisted-15.4.0.tar.bz2

> tar -xvf Twisted-15.4.0.tar.bz2

Install twisted
> python setup.py install

Error Message:
  File "setup.py", line 13, in <module>
    import setuptools
ImportError: No module named setuptools

Solution:
> sudo apt-get install python-setuptools

It works. but I saw another Error Message:
twisted/test/raiser.c:4:20: fatal error: Python.h: No such file or directory
compilation terminated.
error: command 'gcc' failed with exit status 1

Solution:
> sudo apt-get install python-dev

For the permission issue, I use sudo to install that.
Successfully install twisted.

I try to use print twisted.version to verify the installation. But it does not work. But I can run all the twisted classes in python.

Oh, I need to import twisted first.
>>> import twisted
>>> print twisted.version
[twisted, version 15.4.0]

References:
http://twistedmatrix.com/documents/current/web/howto/web-in-60/error-handling.html

猜你喜欢

转载自sillycat.iteye.com/blog/2243775
今日推荐