【问题标题】:Post to Tornado server发布到 Tornado 服务器
【发布时间】:2011-12-06 23:36:21
【问题描述】:

我正在尝试发布到我的 Tornado Web 服务器,但不断收到 405 错误。不知道出了什么问题。我对 python 很陌生,但我已经搜索了大约一个月,最终决定试一试。

Tornado 网络服务器:

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
import os
import string
from time import sleep
from datetime import datetime
import hashlib
import json

from tornado.options import define, options

define("port", default=8001, help="run on the given port", type=int)


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

class LoginHandler(tornado.web.RequestHandler):
    def get(self):
        email_address = self.get_argument('email')
        password = self.get_argument('password')
        if email_address == '':
            login_response = "{'error': true, 'msg': 'Please enter your email address.'}"
        elif password == '':
            login_response = "{'error': true, 'msg': 'Please enter your password.'}"
        else:
            login_response = "{'error': true, 'msg': 'Thank You.'}"
            self.response.headers['Content-Type'] = "application/json"
            self.response.out.write(json.dumps(login_response))



def main():
    tornado.options.parse_command_line()
    application = tornado.web.Application([
        (r"/", MainHandler),
        (r"/login", LoginHandler),
    ])
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()


if __name__ == "__main__":
    main()

HTML:

    <form id="login_form" action="http://www.mydomain.com/server/login" method="post">
    <label class="grey" for="log">Email Address</label><br />
    <input type="text" name="email" style="width:99%" id="email"><br>
    <label class="grey" for="pwd">Password</label><br />
    <input type="password" name="password" style="width:99%" id="password"><br />
    <label>
    <input name="remember" type="checkbox" checked="checked" value="1" /> &nbsp;Remember me</label><br /><br />
    <input type="submit" id="loginbtn" name="login" value="LOGIN" class="button"><br />
    <a href="forgotpassword.php">Forgot your password?</a>
    </form>

【问题讨论】:

    标签: python post web tornado


    【解决方案1】:

    您必须更改 LoginHandler 以接受 POST 请求。

    像这样:

    class LoginHandler(tornado.web.RequestHandler):
        def post(self):
            email_address = self.get_argument('email', '')
            password = self.get_argument('password', '')
    
            if not email_address:
                login_response = {
                    'error': True, 
                    'msg': 'Please enter your email address.'
                }
            elif not password:
                login_response = {
                    'error': True, 
                    'msg': 'Please enter your password.'
                }
            else:
                login_response = {
                    'error': True, 
                    'msg': 'Thank You.'
                }
    
            self.write(login_response)
    

    【讨论】:

    • 当我将其更改为发布 i 而不是得到 500:内部服务器错误
    • @Bobby,哎呀。我实际上没有测试过它。固定。
    • 非常感谢。我已经克服了错误但无法弄清楚为什么如果没有输入参数它就不起作用,完全忘记了get_argument中的, ''
    猜你喜欢
    • 2015-07-28
    • 2015-09-27
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 2011-01-09
    相关资源
    最近更新 更多