注意:我认为我的代码中发现了什么错误,我没有安装请求模块。我现在正在调查此事。
我用这个引擎应用程序将头撞在墙上。尝试对类似问题给出的补救措施无济于事。也许有人能发现问题所在?
这就是我正在做的事情:
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方法)。浏览器显示此网址:
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请求,并在处理程序上更改get for post。每次我退出浏览器或使用另一个浏览器时仍然会收到错误。
这是我的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上的eclipse neon上使用pydev编写的。一旦调试完毕,我就可以将其上传到Google的云端。
提前感谢任何提示!
在第1条评论之后添加:
a)正确复制缩进:def get(self)以及后面的内容现在正确缩进。
b)添加了app.yaml的内容
c)当我从html页面调用它来查找产品时,get函数运行良好,这里是带有要求所需信息的表单的代码片段:
<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})
答案 0 :(得分:1)
尝试此操作进行问题排查:
import logging
class DisplayProduct(BaseHandler):
def get:
logging.info("this is a GET")
def post:
logging.info("this is a POST")
然后,发送您当前的POST。接下来,向http://localhost:8080/products_display?find_id_txt=test
发送请求。希望你能看到正在发生的事情。