python - Flask url_for 停止接受两位数的用户 ID。漏洞?

标签 python postgresql flask sqlalchemy flask-sqlalchemy

我是 Flask 的新手,我无法弄清楚我的函数有什么问题,也找不到有人遇到过同样的问题。甚至难以解释。

模板 url_for 链接:

<a href="{{ url_for('view_post', pc=post.product_category_by.product_cat_name, post_id=post.id, ui=post.author_id) }}">

Flask View 函数:(Flask SQLAlchemy.PostgreSQL)

@app.route('/viewref/<pc>/<int:post_id><int:ui>')
    def view_post(pc, post_id, ui):
    post = db.session.query(Post).filter_by(id=post_id).first()
    db.session.commit()
    gc.collect()
    return render_template('view_post.html', post=post)

示例:

让我们以 ID 为 26 的帖子和 ID 为 910 的两个用户(或帖子作者)为例。当我通过 ID 为 9 的用户时,我被重定向到正确的 View ,其结束 url:/viewref/productCat/269 (26是帖子 ID,9 是用户 ID)。太棒了,它有效,我看到了一个帖子!

问题:

但是当 ID 10 或更高(12、299 等)的用户在 url_for 中传递时,view_post 的查询函数从数据库中提取 None,随后我的 view_post.html 模板抛出错误

(UndefinedError: 'None' has no attribute 'product_category_by')

有什么联系?

view_post 函数的关键是仅通过给定的 post_id 获取帖子。为什么在用户 ID > 9 的情况下会得到 None,如果我的函数仅采用 post_id 进行查询,而其他变量仅用于 url 构造?

附言如果我从 url_forview_post 函数中排除 ui 一切正常。

最佳答案

我不确定您希望 URL 路由器如何判断 post_id 结束和 ui 开始的位置。您应该使用实际的分隔符:

@app.route('/viewref/<pc>/<int:post_id>/<int:ui>')

关于python - Flask url_for 停止接受两位数的用户 ID。漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31560613/

相关文章:

python - 如何获得任意嵌套的列表列表中的元素总数?

python - 重新安装 python 并使 import numpy 工作

sql - 需要有关返回符合特定条件的最后记录的 SQL 查询的帮助

sql - PostgreSQL 从一个表中选择全部并从表关系中加入计数

database - postgresql Multi-Tenancy 模式与数据库

python - 从交互式控制台运行代码时无法访问数据库

python - Celery 将所有输出标记为警告

python - 值错误: No JSON object could be decoded for a valid JSON file

python - 快速入门 Flask 应用程序因某种原因失败

python - 每次访问 Flask View 的增量计数器