首页 > 解决方案 > 烧瓶 current_user 是 None 类型

问题描述

我以前工作的代码现在导致我的主烧瓶应用程序无法运行。

错误来自我的 forms.py 文件。

class selectClass(FlaskForm):

    a = current_user.database
    conn = sqlite3.connect("C:\\Users\\Lenovo\\PycharmProjects\\spacedonline\\"+a)
    c = conn.cursor()
    c.execute("SELECT Class FROM Students ")

    data = c.fetchall()

    listofclasses = []
    for clas in data:
        if clas[0] not in listofclasses:
            listofclasses.append(clas[0])

    finallist = []
    for clas in listofclasses:
        finallist.append((clas, clas))

    nameofclass=SelectField(u"Name of Class", choices=finallist)
    submit= SubmitField("Select")

在尝试启动 main.py 文件时,我收到以下消息:

Traceback (most recent call last):
  File "C:/Users/Lenovo/PycharmProjects/spacedonline/forms.py", line 102, in <module>
    class selectClass(FlaskForm):
  File "C:/Users/Lenovo/PycharmProjects/spacedonline/forms.py", line 104, in selectClass
    a = current_user.database
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36-32\lib\site-packages\werkzeug\local.py", line 347, in __getattr__
    return getattr(self._get_current_object(), name)
AttributeError: 'NoneType' object has no attribute 'database'

正如我所说,它之前没有返回这个错误,我很茫然。

标签: pythonflaskflask-wtforms

解决方案


我已经登录,当问题代码被注释掉时,我的页面显示我已登录。

我通过创建一个创建类的函数来解决这个问题:'''

def selectclassform():
        class SelectClass(FlaskForm):


            a = current_user.database
            conn = sqlite3.connect("C:\\Users\\Lenovo\\PycharmProjects\\spacedonline\\"+a)
            c = conn.cursor()
            c.execute("SELECT Class FROM Students ")

            data = c.fetchall()

            listofclasses = []
            for clas in data:
                if clas[0] not in listofclasses:
                    listofclasses.append(clas[0])

            finallist = []
            for clas in listofclasses:
                finallist.append((clas, clas))

            nameofclass=SelectField(u"Name of Class", choices=finallist)
            submit= SubmitField("Select")

        return (SelectClass)
'''

然后在主apps.py文件中调用该函数:

'''

@app.route("/select", methods=["GET", "POST"])
def selectclass():
    if current_user.is_authenticated:
        form = selectclassform()()
        print(form)
        if form.validate_on_submit():
            print("valid")
            session ["nameofclass"]=form.nameofclass.data
            #return printtable(form.nameofclass.data, current_user.database)
            return redirect(url_for("validate"))
        else:
            print("bye")
        return render_template("select.html", form=form)
    else:
        return redirect(url_for("login"))

'''


推荐阅读