我想知道如何编辑或更新模型。我尝试过几个场景,有时会给出错误消息:405 Method Not Allowed-Method POST is Not Allowed for this resource。以下是我的代码:
Python模型:
import os
import webapp2
import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext.webapp import template
class MessageModel(db.Model):
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
class Message(webapp2.RequestHandler):
def get(self):
doRender(self,'message.htm')
def post(self):
m = MessageModel()
m.content = self.request.get('content')
m.put()
self.redirect('/view')
class View(webapp2.RequestHandler):
def get(self):
que = db.Query(MessageModel)
messageview_list = que.fetch(999)
doRender(self,
'view.htm',
{'messageview_list': messageview_list })
class Edit(webapp2.RequestHandler):
def get(self):
doRender(self,'edit.htm')
def post(self):
updated_content = self.request.get('content')
content_query = db.GqlQuery("SELECT * "
"FROM MessageModel "
"ORDER BY date DESC LIMIT 1")
messageview_list = content_query.fetch(1)
m = MessageModel()
m.content = self.request.get(updated_content)
m.put()
doRender(self,
'edit.htm',
{'messageview_list': messageview_list })
class Main(webapp2.RequestHandler):
def get(self):
doRender(self,'index.htm')
def doRender(handler, tname = 'index.htm', values = { }):
temp = os.path.join(
os.path.dirname(__file__),
'templates/' + tname)
if not os.path.isfile(temp):
return False
newval = dict(values)
newval['path'] = handler.request.path
outstr = template.render(temp, newval)
handler.response.out.write(outstr)
return True
app = webapp2.WSGIApplication([('/', Main),
('/message', Message),
('/view', View),
('/edit', Edit)],
debug=True)
HTML表单:
^{pr2}$
我假设缩进是由于复制/粘贴造成的,但是要确保}函数在类中实际缩进。在
post()
和{在您的表单中,您有
<textarea name="message" rows="3" cols="60" MAXLENGTH=60>
,但是在您的def post()
中使用updated_content = self.request.get('content')
,它在请求中查找content
关键字。另外,你的编辑看起来不像你想要的那样。为了编辑一个实体,这个过程的基本轮廓是:1)检索实体(如你所做的那样,使用一些参数进行查询);2)根据需要修改实体的属性;3.)将实体放回数据存储中。在从您的代码中,您似乎在检索最后一个输入到数据存储中的实体,但随后创建了一个新的模型,而不是编辑该模型(假设这是您想要做的-不太确定这是否准确:)。如果要修改返回的实体,则此操作应该有效:
相关问题 更多 >
编程相关推荐