【问题标题】:I am starting web development with Tornado. Need some beginner assistance我正在使用 Tornado 开始 Web 开发。需要一些初学者帮助
【发布时间】:2013-02-11 19:56:59
【问题描述】:

抱歉这个问题太长了,但我很困惑,不知道我需要什么。因此,请在发布任何内容之前通读整个问题,以便您获得更好的想法。

所以,我是一名软件工程合作学生,我的老板希望我使用 Tornado 开发一个 Web 应用程序。我在高中时做过一些 html 和 css,但这真的不符合我的要求。

Tornado 几乎没有任何入门教程。当然,有一个 hello world 示例,但随后他们抛出了一些聊天应用程序,在我的情况下,也可以用二进制编写。

我知道如何使用 tornado 来渲染页面并将数据作为参数发送。然后我可以使用这些数据在网页本身内执行一些逻辑(即数据库请求、循环......)我现在知道足够的 Javascript 来调用函数来编写文本或发出警报。

现在问题出现在我想转到另一个 html 页面的地方。当然,我可以使用 Javascript 或 html 访问外部站点(即 Google),但如果我尝试访问同一目录中的相关文档,我只会得到 404。我的主管希望我使用 POST 和GET 请求以调用我的 Tornado 服务器 RequestHandler(所以我可以再次调用 render),但我就是不知道如何发出/接收该请求。

最后,主要有三个问题:

  • 要正确使用 Tornado,我还应该了解哪些其他语言?
    • 我知道html、xslt、css、一些JS、SQL、json
    • 我不想成为网络大师;我只想要基础知识
  • 如何在我的龙卷风处理程序上发出 GET/POST 请求?
  • 如何重定向到相关的 html 页面?

这是我正在使用的处理程序:

class MainHandler(RequestHandler):

    def get(self):
        print 'get...',
        self.render('test.html', data = Data())
        print 'done'


    def post(self):
        print 'post...',
        pass
        print 'done'

编辑: 我现在对 RequestHandlers 有了更多的了解,但我不知道正确的做法是什么。我有这个 RequestHandler 处理两个页面的请求,但我希望能够为每个页面使用一个处理程序,我不知道我是否以最好的方式解释参数。我也不知道如何让参数转到 *args 参数。

def get(self, *args, ** kwargs):
    print 'get:', args, kwargs, 'Handling:',

    if len(self.get_arguments('user')) > 0:
        print 'user'
        self.render('page2.html', user = self.get_arguments('user')[0])
    elif len(self.get_arguments('page')):
        print 'specific page:', self.get_argument('page')
        self.render(self.get_argument('page'), data = Data())
    else:
        print 'default'
        self.render('test.html', data = Data())

【问题讨论】:

    标签: web-applications tornado


    【解决方案1】:

    当你定义你的应用程序时,你可以指定你的模板目录和你的静态文件目录:

    import Settings
    
    class Application(tornado.web.Application):
        def __init__(self):
            handlers = [
                (r"/", MainHandler),
            ]
            settings = {
                "template_path":Settings.TEMPLATE_PATH,
                "static_path":Settings.STATIC_PATH,
                "debug":Settings.DEBUG
            }
            tornado.web.Application.__init__(self, handlers, **settings)
    

    你可以定义一个 Settings.py

    import os
    DEBUG = True
    DIRNAME = os.path.dirname(__file__)
    STATIC_PATH = os.path.join(DIRNAME, 'static')
    TEMPLATE_PATH = os.path.join(DIRNAME, 'template')
    

    当您尝试访问您的龙卷风起始网址时:

    http://localhost:port/ 
    

    Tornado 在你的 MainHandler 中执行你的 get 方法。然后 Tornado 渲染 test.html 页面。但是你必须指定 TEMPLATE_PATH 来指示 Tornado 从哪里可以得到这个模板。

    class MainHandler(RequestHandler):
    
        def get(self):
            print 'get...',
            self.render('test.html', data = Data())
            print 'done'
    

    要在您的处理程序中的 get 或 post 方法中进行重定向,您可以添加以下内容:

    self.redirect("/my_new_page.html")
    

    要正确使用 Tornado,您可能会了解 Web 应用程序的工作原理。客户端/服务器通信,理解 HTML 动词和更重要的尝试和尝试

    【讨论】:

    • 啊,谢谢。这很有帮助。我现在也开始弄清楚如何拦截表单获取请求。
    • 您知道我可以使用哪些资源来了解有关 RequestHandlers 的更多信息吗?具体来说,我想了解如何为页面分配新的 RequestHandler,以及构建获取请求以请求新页面的最佳实践。再一次,我觉得我应该知道使用 Tornado 有一定程度的理解,但我就是没有。
    • 我在最后的问题中添加了另一部分。
    • 我做一个新的回答,希望对你有帮助
    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2021-04-11
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多