将PHP伪代码转换为Tornado/Python
我很习惯用PHP来工作——创建一个新的 .php 文件,输入所有内容,把它和一些HTML混合在一起,包含或引用不同的 .php/.html 文件等等。
我刚开始学习使用Tornado,但对Tornado的基本原理和构建方式有点搞不清楚。
为了更好地理解Tornado的工作方式(当然,除了阅读他们的文档),我想把我在PHP中熟悉的东西用Tornado重新做一遍。
比如,在PHP中,我有一个 index.php
页面。在这个页面上,我有一个 email
输入框和一个 password
输入框。当用户提交表单时,action
设置为 login.php
,然后我们就会跳转到 login.php
,在这里调用“登录函数”来验证用户。如果一切正常,$_SESSION
变量就会被设置,用户就登录了。如果出现错误,login.php
上会显示错误信息。
那么,在Tornado中,这个过程的“伪代码”应该是什么样的呢?
一些基本的、不太完美的Python代码:
import os
import tornado.web
import tornado.ioloop
root = os.path.dirname(__file__)
port = 8888
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
class LoginHandler(tornado.web.RequestHandler):
def get(self):
self.render("login.html", title="Login to your account!")
def post(self):
useremail = self.get_argument("useremail", None)
password = self.get_argument("password", None)
self.render("login.html", title="Login to your account!")
def main():
application = tornado.web.Application([
(r"/", MainHandler),
(r"/login", LoginHandler),
(r"/css/(.*)", tornado.web.StaticFileHandler, {"path": os.path.join(root, 'css')}),
(r"/pictures/(.*)", tornado.web.StaticFileHandler, {"path": os.path.join(root, 'pictures')}),
])
application.listen(port)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
对于我这个转换的帮助非常感谢。这种做事方式和我习惯的完全不同,像这样简单过程的伪代码肯定会有很大帮助。无论如何,感谢大家。
1 个回答
-1
你可以使用react,它是一个基于事件驱动的、非阻塞的输入输出处理方式,适用于PHP。
下面是一个简单的HTTP服务器示例,它在1337端口上监听请求:
<?php
$i = 0;
$app = function ($request, $response) use (&$i) {
$i++;
$text = "This is request number $i.\n";
$headers = array('Content-Type' => 'text/plain');
$response->writeHead(200, $headers);
$response->end($text);
};
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$http = new React\Http\Server($socket);
$http->on('request', $app);
$socket->listen(1337);
$loop->run();