2011-10-13 21 views
10

Tornado Web Sunucusuna posta göndermeye çalışıyorum ancak 405 Hatası almaya devam ediyorum. Neyin yanlış gittiğinden emin değilim. Python'a oldukça yeni geldim ama yaklaşık bir aydır bunu araştırdım ve sonunda bir karar verdim.Tornado sunucusuna posta gönderme

Tornado Web Sunucusu:

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> 

cevap

23

Bir POST isteğini kabul etmek LoginHandler değiştirmek zorunda kalacaktır. böylece gibi

:

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

Ben 500 olsun daha i göndermek için değiştirmek: oops, iç sunucu hatası – Bobby

+0

@Bobby. Gerçekten test etmemiştim. Sabit. – daharon

+0

çok teşekkürler. Hatayı geçtim, ama neden bir argüman girilmemişse işe yaramazsa, "get_argument" de "," yı unuttum. – Bobby