向Tornado服务器发送请求

10 投票
1 回答
20862 浏览
提问于 2025-04-17 04:14

我正在尝试向我的Tornado网络服务器发送请求,但总是收到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>

1 个回答

22

你需要修改登录处理程序,让它能够接受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)

撰写回答