2012-09-01 2 views
2

i get 405: Méthode non autorisée, alors où est le problème, il est une méthode post depuis que je veux envoyer des données au serveurtornade Ne pas accepter la méthode 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") 

et le modèle:

<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> 

et j'ai simplifié le gestionnaire à ce

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") 

toujours l'erreur de méthode il dident vérifier le contenu du gestionnaire à tous (sinon il a soulevé et erreur lorsque vous ne trouvez pas de courriel)!

  • NB: est-ce parce que j'ai utilisé l'effet d'accodion (CSS3)? la page contient 3 parties: le profil, télécharger le produit, et rechercher le produit, et bien sûr chaque partie a son propre gestionnaire; donc le profil appellera un GET pour obtenir l'information d'utilisateur et l'avatar, et le produit de téléchargement fera un POST pour écrire l'information de produit au serveur, et finalement la recherche fera un GET au serveur pour rechercher le produit. alors, est-ce que je fais une erreur?

Répondre

3

RÉSOLU! il semble que le problème provient du gestionnaire d'image; dans le URLSpec, IL DOIT ÊTRE LE DERNIER DANS LA LISTE

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

c'est pourquoi des erreurs lors de l'utilisation de retour de la méthode GET concernant l'image! espère que cela aidera, et merci :)

+1

Heureux vous l'avez résolu, mais à l'avenir, vous devriez également inclure votre URLSpec :-) ok –

+1

, merci, je suis un débutant: p –

+0

Je vais avoir le même question et cela ne résout rien. La source de l'erreur doit être autre. – Sebastialonso

Questions connexes