flask官方模板博客实例遇到的问题

https://dormousehole.readthedocs.io/en/latest/tutorial/index.html

当我创建博客文章时报错

TypeError: 'builtin_function_or_method' object is not subscriptable
TypeError:“内置函数”或“方法”对象不可下标

在这里插入图片描述
在这里插入图片描述

查看文件

创建文章的代码如下

@bp.route('/create',methods=('GET','POST'))
@login_required
def create():
    if request.method == 'POST':
        title = request.form['title']
        body = request.form['body']
        error = None

        if not title:
            error = 'Title is required.'

        if error is not None:
            flash(error)
        else:
            db = get_db()
            db.execute(
                'INSERT INTO post (title,body,author_id)'
                'VALUES(?,?,?)',
                (title,body,g.user['id'])
            )
            db.commit()
            return redirect(url_for('blog.index'))
    return render_template('blog/create.html')
问题原因

/opt/flask-tutorial/flaskr/auth.py

@bp.before_app_request
def load_logged_in_user():
    user_id = session.get('user_id')

    if user_id is None:
        g.user = None
    else:
        g.user = get_db().execute(
            'SELECT * FROM user WHERE id = ?',(user_id,)
        ).fetchone()  #少了小括号

bp.before_app_request() 注册一个 在视图函数之前运行的函数,不论其 URL 是什么。 load_logged_in_user 检查用户 id 是否已经储存在 session 中,并从数据库中获取用户数据,然后储存在 g.user 中。 g.user 的持续时间比请求要长。 如果没有用户 id ,或者 id 不存在,那么 g.user 将会是 None 。

fetchone() 根据查询返回一个记录行。 如果查询没有结果,则返回 None 。后面还用到 fetchall() ,它返回包括所有结果的列表

おすすめ

転載: blog.csdn.net/qq_44379042/article/details/121202018