繁体   English   中英

Flask current_user 是 None 类型

[英]Flask current_user is None type

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

错误来自我的 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'

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

你可能没有登录。所以 current_user 是 NoneType。 尝试:

if current_user: # or current_user.is_active:
    a = current_user.database
    ...
else:
    return redirect('/login')

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

我通过创建 function 解决了这个问题,它创建了 class: '''

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主文件中调用function:

'''

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

'''

我遇到了同样的问题,这实际上是由于安全密钥造成的。

我已经设置了不同的应用程序安全密钥,现在可以使用了。

app.config['SECRET_KEY'] = 'new key 1'
app.config['SECURITY_PASSWORD_SALT'] = 'new key 2' 

这可能是由于创建新实例时安全控制失败所致。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM