我正在构建一个学习项目(使用Python和googleappengine),不知道如何做我想做的事情。我希望有人能给我指出正确的方向
这个项目是一个基本的web应用程序,可以实时查看。如您所见,addchore功能运行得很好。仅供参考,您必须重新加载页面,以便在添加杂务后查看更新的杂务列表。但是,如果你想查看一个杂务的详细信息页面,甚至完成一个杂务,你还不能在应用程序中这样做,因为我还没有弄清楚如何以一种方式引用数据库实体,即离开一个页面转到另一个页面
更新后的项目代码为available on GitHub以供参考。基本上,我想做的是,当用户点击其中一个“dochore”链接时,应用程序会获取一个对相应Chore名称的引用,然后就可以进行数据库查找
例如,抓取一个对“Dishes”的引用,然后应用程序可以查找名为“Dishes”的chore数据对象。提前感谢您的时间和努力
这是我的main.py文件
import os
import re
from string import letters
import webapp2
import jinja2
from google.appengine.ext import db
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir),
autoescape = True)
def render_str(template, **params):
t = jinja_env.get_template(template)
return t.render(params)
class BlogHandler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def render_str(self, template, **params):
return render_str(template, **params)
def render(self, template, **kw):
self.write(self.render_str(template, **kw))
class ChoreFront(BlogHandler):
def get(self):
chores = db.GqlQuery("select * from Chore order by created desc limit 10")
self.render('front.html', chores = chores)
class AddChore(BlogHandler):
def get(self):
self.render('add-chore.html')
def post(self):
name = self.request.get('chore_name')
description = self.request.get('chore_description')
if name and description:
# TODO - Implement error handling for duplicate chore
chore = Chore(parent = blog_key(),
key_name = name,
name = name,
description = description,
times_completed = 0,
last_doer = "No one")
chore.put()
self.redirect('/')
else:
error = "Please provide a chore name and description!"
self.render("add-chore.html", name = name, description = description, error=error)
class DoChore(BlogHandler):
def get(self):
self.render('do-chore.html')
def post(self):
doer_name = self.request.get('doer_name')
if doer_name:
# TODO - Update times_completed, last_doer, last_completed for the chore
self.redirect('/')
else:
error = "Please enter your name!"
self.render("do-chore.html", doer_name = doer_name, error=error)
class ChoreDetail(BlogHandler):
def get(self):
self.render('chore-detail.html')
def post(self):
doer_name = self.request.get('doer_name')
if doer_name:
# TODO - Update times_completed, last_doer,
# last_completed(done automatically) for the chore
self.redirect('/')
else:
error = "Please enter your name!"
self.render("do-chore.html", doer_name = doer_name, error=error)
def blog_key(name = 'default'):
return db.Key.from_path('blogs', name)
class Chore(db.Model):
name = db.StringProperty(required = True)
description = db.TextProperty(required = True)
times_completed = db.IntegerProperty()
last_doer = db.StringProperty()
created = db.DateTimeProperty(auto_now_add = True)
last_completed = db.DateTimeProperty(auto_now = True)
def render(self):
self._render_text = self.description.replace('\n', '<br>')
return render_str("chore.html", chore = self)
app = webapp2.WSGIApplication([('/', ChoreFront),
('/addchore', AddChore),
('/dochore', DoChore),
('/choredetail', ChoreDetail)
],
debug=True)
目前没有回答
相关问题 更多 >
编程相关推荐