我正在使用 python 中的 Flask 框架创建一个博客。
我有以下用于显示帖子的视图/网址:
@post_blueprint.route('/post/<int:year>/<int:month>/<title>', methods=['GET'])
def get_post(year, month, title):
try:
title = title.replace('-', ' ')
post = Post.query.filter(Post.title == title).one()
post.comment_form = UserCommentForm()
except NoResultFound:
raise
return render_template('show_single_post.html', post=post)
在上面的代码中,我还传递了一个评论表单,让用户发表评论。之后,我编写了用于接收此帖子请求的视图/网址:
@post_blueprint.route('post/<int:post_id/comment/add/', mehtods=['POST'])
def add_comment(post_id):
post = Post.query.get(post_id)
if not post:
raise Exception
if request.method == 'POST':
form = UserCommentForm(request.form)
if form.validate():
try:
user = User.query.\
filter(User.email == form.email.data).one()
except NoResultFound:
user = User(form.username.data, form.email.data,
form.website.data or None)
try:
comment = Comment(form.comment.data, post_id)
comment.author = user
db_session.add(comment)
db_session.commit()
except IntegrityError:
raise
return redirect(url_for('.get_post', year=post.posted_on.year,
month=post.posted_on.month,
title=post.title.replace(' ','-')
)
)
在上面的视图中,我正在从 db 访问 post 对象以确保 post 存在。如果用户不存在,我创建用户,然后保存评论。
现在我的问题不是访问完整的 Post 对象,我可以通过运行计数查询来简单地测试 post 的存在,但是由于我需要 post 属性,所以我必须获取完整的对象。
在我看来,也许我的 url 方案不是那么好,或者这里可以做一些更好的事情!
谁能告诉我这是否以及如何改进?