【问题标题】:Pseudocode for PHP into Tornado/Python将 PHP 的伪代码转换为 Tornado/Python
【发布时间】:2013-02-05 18:44:08
【问题描述】:

我非常习惯使用 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()

非常感谢您在此处对我的转换提供任何帮助。这只是一种与我习惯非常不同的做事方式,并且像这样的简单过程的伪代码肯定会有所帮助。无论如何,谢谢大家。

【问题讨论】:

    标签: php python tornado


    【解决方案1】:

    您可以将react 用于 PHP 的事件驱动、非阻塞 I/O。

    下面是一个简单的 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-27
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多