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
Python Lover(7)Twisted Basic - Error Handling, Post, rpy Scripts
猜你喜欢
转载自sillycat.iteye.com/blog/2243775
今日推荐
周排行