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

本文介绍如何使用Twisted框架实现错误处理、自定义响应代码、处理POST请求等多种功能,并通过实例展示了如何创建资源处理程序来响应不同的HTTP请求。
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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值