2012-09-01 35 views
2

我得到的405:不允許的方法,所以哪裏出了問題,這是一個 POST方法,因爲我想將數據發送到服務器龍捲風不接受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") 

總是方法錯誤它在所有 檢查處理程序內容(否則它會在沒有找到電子郵件時引發並出錯)!

  • 注意:是因爲我使用了隨叫效應(CSS3)嗎?該頁面包含3個部分:配置文件,上傳產品和搜索產品,當然每個部分都有自己的處理程序;因此該配置文件將調用 GET來獲取用戶信息和頭像,並且上傳產品將進行POST以將產品信息寫入服務器,最後搜索將向服務器發送GET以搜索產品。 所以,我犯了什麼錯誤?

回答

3

已解決! 看來問題來自圖片處理程序;在URLSpec,它必須是最後一個在列表中

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

這是一個使用GET方法回傳失誤的時候,爲什麼有關的圖片! 希望這將幫助,謝謝你們:)

+1

很高興你解決了這個問題,但在未來,你還應該包括你的URLSpec :-) –

+1

好吧,謝謝你,是初學者:P –

+0

我有相同問題並沒有解決。錯誤的來源必須是其他。 – Sebastialonso