【问题标题】:tornado dont accept the POST method龙卷风不接受 POST 方法
【发布时间】:2012-09-01 21:26:23
【问题描述】:

我得到了 405: Method Not Allowed,那么问题出在哪里,它是 post 方法,因为我想向服务器发送数据

class VendreHandler(BaseHandler): 
    @tornado.web.authenticated 
    def post(self): 
        self.db = conn["essog"] 
        user = self.get_secure_cookie("mechtari") 
        info = tornado.escape.json_decode(user) 
        email = info["email"] 
        namep = self.get_argument("namep") 
        prix = self.get_argument("prix") 
        description = self.get_argument("description") 
        date = datetime.datetime.now().date() 
        try: 
            photo = self.request.files['photo'][0]["body"] 
            try: 
                avctype = self.request.files['avatar'][0]["content_type"] 
                image = Image.open(StringIO.StringIO(buf=avat)) 
                type = image.format 
                (x, y) = image.size 
                if x < y: 
                   orientation = "portrait" 
                else: 
                   orientation = "paysage" 
                pref = str(time.time())
                nomfi = pref.replace(".", "") 
                nomfich = nomfi + "-" + self.request.files['avatar'][0]["filename"] 
                self.fs = GridFS(self.db) 
                avatar_id = self.fs.put(avat, content_type=avctype,filename=nomfich) 
            except IOError, TypeError: 
                self.redirect("/error-im") 
        except KeyError: 
            nomfich = "nofile" 
            orientation = "paysage" 
            avctype = "image/jpeg" 
            avatar_id = '503ae8553a5f3a0dd8b9cb4c' 
    self.db.users.update({"email":email}, {"$set":{"produit_up.namep":namep,"produit_up.prix":prix,"produit_up.photo":photo_id, "produit_up.description":description,"produit_up.date":date, "produit_up.vendu":False}}) 
    self.redirect("/success") 

和模板:

<form id="formvente" name="formvente"  method="post" action="/vendre" enctype="multipart/form-data"> 
{% raw xsrf_form_html() %} 
<label for="namep">Le nom du Produit</label> 
<input type="text" name="namep" required title="vous devez mettre le nom du produit" placeholder="exemple: peugeot 206"> 
<label for="prix">Son prix (en Dinars Alg&eacute;rien)</label> 
<input type="number" name="prix" required title="vous devez mettre le prix en chiffre (en Dinars Alg&eacute;rien)" placeholder="exemple: 800000"> 
<label for="photo">Une photo de votre produit</label> 
<input name="photo" type="file"> 
<label for="description">Veuillez donner une d&eacute;scription du produit (maximum 160 caract&egrave;res)</label> 
<textarea name="description" id="description" rows="3" cols="60" required title="vous devez mettre une petite description" placeholder="escence, 2006, roulant 100000km, toutes options, siege en cuir"                                 onKeyDown="textCounter(document.formvente.description,160)"                                        onKeyUp="textCounter(document.formvente.description, 160)"></textarea> 
<meter name="shower" min="1" max="160" value="1"id="shower" low="30" high="140">afficher son etat</meter> 
<input id="vendre" type="submit" value="Mettre en Vente"/> 
                            </form> 

我已经将处理程序简化为这个

class VendreHandler(tornado.web.RequestHandler): 
    def post(self): 
        namep = 1 
        prix = 3 
        description = 43 
        date = 345 
        self.db = conn["essog"] 
        self.db.users.update({"email":email}, {"$set":{"produit_up.namep":namep,"produit_up.prix":prix, "produit_up.photo":photo_id, "produit_up.description":description,"produit_up.date":date, "produit_up.vendu":False}}) 
        self.redirect("/profil#vendu") 

总是方法错误它根本没有检查处理程序内容 (否则在找不到电子邮件时会引发错误)!

  • NB:是因为我使用了手风琴效果(CSS3)吗?该页面包含 3 个部分:个人资料、上传产品和搜索产品,当然每个部分都有自己的处理程序;所以配置文件会调用 一个GET获取用户信息和头像,上传产品会做一个POST写产品信息到服务器,最后搜索会做一个GET到服务器搜索产品。 所以,我犯错了吗?

【问题讨论】:

    标签: python forms mongodb post tornado


    【解决方案1】:

    已解决! 似乎问题来自图片处理程序;在 URLSpec 中,它必须是列表中的最后一个

    url = [
    ...,
    ...,
    ...,
    (r"/(?P<picture>.*)", handlers.PictureHandler)]
    

    这就是为什么使用 GET 方法时返回有关图片的错误的原因! 希望这会有所帮助,谢谢你:)

    【讨论】:

    • 很高兴你解决了它,但将来你还应该包括你的 URLSpec :-)
    • 我也遇到了同样的问题,但这并没有解决任何问题。错误的来源必须是其他的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多