2

Python で Flask フレームワークを使用してブログを作成しています。

投稿を表示するためのビュー/URLは次のとおりです。

    @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)

上記のコードでは、ユーザーがコメントを投稿できるようにするコメント フォームも渡しています。その後、この投稿リクエストを受け取るためのビュー/URL を書きました。

    @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 オブジェクトにアクセスする代わりに、count クエリを実行して投稿の存在を簡単にテストできたことですが、投稿属性が必要なため、完全なオブジェクトを取得する必要があります。

私のURLスキームがあまり良くないか、ここでできるもっと良いことがあると思います!

これを改善できるかどうか、またどのように改善できるかを誰かに教えてもらえますか?

4

1 に答える 1

0

あなたのURLスキーマは大丈夫で、検索エンジンにうまく機能するはずです。クラウドでは、 Flask-SQLAlchemyで次のようなクエリを使用します。

title, posted_on = Post.query.get_or_404(post_id).values(Post.title, Post.posted_on)

私はそれをクラウドでテストしていませんが、それは機能し、存在しない投稿によってHTTP404エラーを発生させるはずです。また、完全な投稿なしで、タイトルとposted_onデータの転送のみが必要です。

于 2012-07-24T11:17:24.610 に答える