我是一个新手程序员,在 GAE 上使用带有 wtforms 的烧瓶通过表单获取数据并列出数据。目前一切正常,但我的大多数观点都使用非常相似的表单创建、发布和列表方法。我想要一种方法来简化混乱并减少我使用的代码量。
我已经看到了三个潜在的选择:
- 来自 Flask 的可插入视图
- 只是一个简单的烧瓶装饰器
- 可能是方法视图?(见 1)。
目前我有一些 /new/post /new/home 等。
下面的相关代码片段: 视图:
@app.route('/new/post', methods = ['GET', 'POST'])
@login_required
def new_post():
form = PostForm()
if form.validate_on_submit():
post = Post(title = form.title.data,
content = form.content.data,
hometest = form.hometest.data,
author = users.get_current_user())
post.put()
flash('Post saved on database.')
return redirect(url_for('list_posts'))
form.hometest.choices = [ (h.key.id(),h.homename)for h in Home.query()]
return render_template('new_post.html', form=form)
@app.route('/new/home',methods = ['GET','POST'])
def home_new():
form = HomeForm()
if form.validate_on_submit():
home = Home(homeid = int(form.homeid.data),
homename = form.homename.data)
home.put()
flash('Home saved on database')
return redirect(url_for('home'))
return render_template('new_home.html',form = form)
楷模:
class Home(ndb.Model):
homeid = ndb.IntegerProperty(required=True)
homename = ndb.StringProperty(required=True)
hometest = ndb.IntegerProperty(required=True)
class Post(db.Model):
title = db.StringProperty(required = True)
content = db.TextProperty(required = True)
when = db.DateTimeProperty(auto_now_add = True)
author = db.UserProperty(required = True)
形式:
class PostForm(Form):
title = wtf.TextField('Title', validators=[validators.Required()])
content = wtf.TextAreaField('Content', validators=[validators.Required()])
hometest = wtf.SelectField(u'Home Name List', coerce=int,validators=[validators.optional()])
class HomeForm(wtf.Form):
homeid = TextField('ID of Home', [validators.Length(min=1, max=25)])
homename = TextField('Name of Home', [validators.Length(min=4, max=25)])
我在想一些更时尚的东西,比如:
@app.route('/new/<whatsnew>', methods)
@mydecorator
def new_whatsnew:
Stuff specific to <whatsnew>
@app.route('/list/<whatsnew>', methods)
@mydecorator
def list_whatsnew
Stuff specific to <whatsnew>
当然,如果有更多可接受的方式(或没有办法解决这个问题)。我不是在寻找实际的代码,虽然一个例子会很好,但这是正确的设计方法?