注:私は自分のコードで何が間違っていると思っています。私は今これを調べている。405メソッドが許可されていませんこのリソース(AppEngine、Python)でメソッドGETが許可されていません
私はこのappengineアプリケーションで壁に頭を叩いています。同様の質問に対して与えられた救済を無駄にしようとしました。おそらく、誰かが問題の原因を突き止めることができますか?
1)私は、ユーザーの入力に基づいてアプリ内の製品を作成します。
は、ここで私がやっているものです。かつて私が最近作成した製品を表示するページを呼び出しNDBに書き込ま:
import requests
....
r = requests.post('products_display', data = {'find_id_txt':prod_id_txt})
要求が経由する:それは正しいハンドラに到着
application = webapp2.WSGIApplication([
('/products_add', AddProduct),
('/products_display', DisplayProduct),
...
], config = session_params, debug = True)
と私は(405エラーが出ます405メソッドが許可されていませんこのリソースに対してメソッドGETは許可されていません)。ブラウザはこのURLを示しています
http://localhost:8080/products_display
これは、ハンドラ(一瞬、私は単に製品が見つかりされたかどうか教えてページを表示する)のコードです。
class DisplayProduct(BaseHandler):
# Finds a product on exact Prod_ID property
def get(self):
user = usermgmt.get_user(self)
logout_url = users.create_logout_url(self.request.uri)
access = usermgmt.get_auth("Products")
client_name = usermgmt.get_client_subdomain()
search_key = self.request.get('find_id_txt')
find_query = models.Product.query(models.Product.prod_id == search_key, ancestor = get_products_key()).get()
# Check if query returned a value
if find_query:
template_values = {
'client_name': client_name,
'user': user,
'logout_url': logout_url,
'alert_message': "Product1: " + search_key + " was found."
}
template = JINJA_ENVIRONMENT.get_template('alert-blue.html')
self.response.write(template.render(template_values))
else:
template_values = {
'client_name': client_name,
'user': user,
'logout_url': logout_url,
'alert_message': "Product1: " + search_key + " could not be found."
}
template = JINJA_ENVIRONMENT.get_template('alert-yellow.html')
self.response.write(template.render(template_values))
私はget、post要求を送信し、ハンドラーでpostのgetを変更するすべての組み合わせを試しました。ブラウザからログアウトするか、別のブラウザを使用するたびにエラーが発生します。
は、ここに私のapp.yamlファイルの内容です:
#application: fpp-system
#version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /categories.*
script: categories.application
login: required
- url: /calendar.*
script: calendars.application
login: required
- url: /images
static_dir: images
- url: /products.*
script: products.application
login: required
- url: /signin.*
script: signin.application
- url: /stylesheets
static_dir: stylesheets
- url: /test.*
script: test.application
- url: /units.*
script: units.application
login: required
- url: /.*
script: main.application
libraries:
- name: webapp2
version: latest
- name: jinja2
version: latest
コードはLinuxのUbuntuの16.04で日食のネオンにPyDevはを使用して書かれています。デバッグしたらGoogleのクラウドにアップロードできます。
ご協力いただきありがとうございます!
1STコメントの後に追加:
a)にコピーされたインデントを正しくます:def(自己)を取得し、次は正しくなりましインデントされています。
:私は製品を見つけるためにhtmlページからそれを呼び出すときに関数getがうまく機能B))はapp.yamlを
Cの内容を追加しました、こちらのフォームでのコードスニペットは、必要な情報をお願いします
<form action="/products_display" method="post">
<div><input value="" name="find_id_txt" size="15"></div>
<div><input type="submit" value="Find"></div>
</form><br>
が、私はプログラム的にそれを呼び出すときには、405エラーを与える:トラブルシューティングするために、これを試してみてください
r = requests.post('products_display', data = {'find_id_txt':prod_id_txt})
あなたの 'app.yaml'ファイルを見る必要があります。 –
コードに実際にインデントされていますか?もし、 'def get()'が更にインデントされる必要があるなら、 'class DisplayProduct()' –
あなたのクラスを表示してください。BaseHandler – Sriram