2011-10-13 109 views
10

我想发布到我的龙卷风Web服务器,但不断得到405错误。不知道发生了什么问题。我对python相当陌生,但我一直在寻找这个约一个月,最后决定放弃它。发布到龙卷风服务器

龙卷风Web服务器:

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> 

回答

23

你将不得不改变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) 
+0

当我改变它的帖子我比拿到500:内部服务器错误 – Bobby

+0

@Bobby,哎呀呀。我没有真正测试过它。固定。 – daharon

+0

非常感谢。我已经知道了它的错误,但无法弄清楚为什么如果一个参数没有进入它不工作,完全忘了'''''get_argument' – Bobby