405: Method Not Allowed が表示されるので、問題はどこにあるのでしょうか。データをサーバーに送信したいので、ポスト メソッドです。
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érien)</label>
<input type="number" name="prix" required title="vous devez mettre le prix en chiffre (en Dinars Algé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éscription du produit (maximum 160 caractè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 を実行して製品を検索します。だから、私は間違っていますか?