【发布时间】:2023-03-12 13:20:01
【问题描述】:
注意:我想我发现我的代码有什么问题,我没有安装请求模块。我正在调查此事。
我正在用这个 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 Method Not Allowed The method GET is not allowed for this resource)。浏览器显示此网址:
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 的云端。
提前感谢您的任何提示!
在第一条评论之后添加:
a) 正确复制缩进:def get(self) 和下面的缩进现在正确。
b) 添加 app.yaml 的内容
c) 当我从 html 页面调用 get 函数来查找产品时,get 函数运行良好,这里是代码 sn-p 以及用于询问所需信息的表单:
<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()需要进一步缩进 vsclass DisplayProduct() -
显示你的类 BaseHandler