Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
名称错误:名称';记录';未定义,请单击Python_Python_Variables_Flask - Fatal编程技术网

名称错误:名称';记录';未定义,请单击Python

名称错误:名称';记录';未定义,请单击Python,python,variables,flask,Python,Variables,Flask,我有一个使用frameworkflask的Python代码,它检查admin是否登录(logged=True)以呈现admin页面,如果admin没有登录(logged=False),则重定向到登录页面 @app.route('/admin_login', methods=['POST', 'GET']) def admin_login(): if request.method == 'POST': login = request.form['login']

我有一个使用frameworkflask的Python代码,它检查admin是否登录(logged=True)以呈现admin页面,如果admin没有登录(logged=False),则重定向到登录页面

@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
    if request.method == 'POST':
        login = request.form['login']
        passsword = request.form['password']

        if (login == 'admin') and (passsword == 'admin_pass'):
            logged = True
            return redirect('/admin_page'), logged
        else:
            return "Wrond login and passsword!"

    else:
        return render_template('admin_login.html')


@app.route('/admin_page')
def admin_page():
    if logged == True:
        return render_template('admin_page.html')
    else:
        return redirect('/admin_login')

但是如果logged==True:-
NameError:name“logged”未定义,则我在
中得到一个错误。我试图使
日志化
全局化,但没有效果。因此,如何定义
已登录的
并在函数
管理页面中使用它?

您应该避免在服务器上使用全局
已登录变量。然后任何人都将被允许在成功登录后使用您的网站!您应该改用会话变量

会话数据存储在cookie之上并进行加密。对于这种加密,Flask应用程序需要定义的密钥。会话对象也是包含键值对的字典对象

如果尚未获得主脚本,请将其添加到主脚本顶部附近:

from flask import Flask, session, redirect, url_for, escape, request, flash
app = Flask(__name__)
app.secret_key = 'any random string’
然后更改函数
admin\u login()
以设置会话变量:

@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
    if request.method == 'POST':
        login = request.form['login']
        passsword = request.form['password']

        if not 'logged_in' in session:
            if (login == 'admin') and (passsword == 'admin_pass'):
                session['logged_in'] = True
                return redirect(url_for("admin_page"))
            else:
                flash("Wrong login and passsword!")
                return render_template('admin_login.html')
        else:
            return redirect(url_for("admin_page"))

    else:
        if "logged_in" in session:
            return redirect(url_for("admin_page"))

        return render_template("admin_login.html")
@app.route('/admin_page')
def admin_page():
    if 'logged_in' in session:
        return render_template('admin_page.html')
    else:
        return redirect(url_for('admin_login'))
@app.route('/logout')
def logout():
   session.pop('logged_in', None)
   return redirect(url_for('index'))
然后更改
admin\u page()
函数以检查此会话变量:

@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
    if request.method == 'POST':
        login = request.form['login']
        passsword = request.form['password']

        if not 'logged_in' in session:
            if (login == 'admin') and (passsword == 'admin_pass'):
                session['logged_in'] = True
                return redirect(url_for("admin_page"))
            else:
                flash("Wrong login and passsword!")
                return render_template('admin_login.html')
        else:
            return redirect(url_for("admin_page"))

    else:
        if "logged_in" in session:
            return redirect(url_for("admin_page"))

        return render_template("admin_login.html")
@app.route('/admin_page')
def admin_page():
    if 'logged_in' in session:
        return render_template('admin_page.html')
    else:
        return redirect(url_for('admin_login'))
@app.route('/logout')
def logout():
   session.pop('logged_in', None)
   return redirect(url_for('index'))
您还需要一个注销端点来弹出会话变量:

@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
    if request.method == 'POST':
        login = request.form['login']
        passsword = request.form['password']

        if not 'logged_in' in session:
            if (login == 'admin') and (passsword == 'admin_pass'):
                session['logged_in'] = True
                return redirect(url_for("admin_page"))
            else:
                flash("Wrong login and passsword!")
                return render_template('admin_login.html')
        else:
            return redirect(url_for("admin_page"))

    else:
        if "logged_in" in session:
            return redirect(url_for("admin_page"))

        return render_template("admin_login.html")
@app.route('/admin_page')
def admin_page():
    if 'logged_in' in session:
        return render_template('admin_page.html')
    else:
        return redirect(url_for('admin_login'))
@app.route('/logout')
def logout():
   session.pop('logged_in', None)
   return redirect(url_for('index'))

应避免在服务器上登录全局
变量。然后任何人都将被允许在成功登录后使用您的网站!您应该改用会话变量

会话数据存储在cookie之上并进行加密。对于这种加密,Flask应用程序需要定义的密钥。会话对象也是包含键值对的字典对象

如果尚未获得主脚本,请将其添加到主脚本顶部附近:

from flask import Flask, session, redirect, url_for, escape, request, flash
app = Flask(__name__)
app.secret_key = 'any random string’
然后更改函数
admin\u login()
以设置会话变量:

@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
    if request.method == 'POST':
        login = request.form['login']
        passsword = request.form['password']

        if not 'logged_in' in session:
            if (login == 'admin') and (passsword == 'admin_pass'):
                session['logged_in'] = True
                return redirect(url_for("admin_page"))
            else:
                flash("Wrong login and passsword!")
                return render_template('admin_login.html')
        else:
            return redirect(url_for("admin_page"))

    else:
        if "logged_in" in session:
            return redirect(url_for("admin_page"))

        return render_template("admin_login.html")
@app.route('/admin_page')
def admin_page():
    if 'logged_in' in session:
        return render_template('admin_page.html')
    else:
        return redirect(url_for('admin_login'))
@app.route('/logout')
def logout():
   session.pop('logged_in', None)
   return redirect(url_for('index'))
然后更改
admin\u page()
函数以检查此会话变量:

@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
    if request.method == 'POST':
        login = request.form['login']
        passsword = request.form['password']

        if not 'logged_in' in session:
            if (login == 'admin') and (passsword == 'admin_pass'):
                session['logged_in'] = True
                return redirect(url_for("admin_page"))
            else:
                flash("Wrong login and passsword!")
                return render_template('admin_login.html')
        else:
            return redirect(url_for("admin_page"))

    else:
        if "logged_in" in session:
            return redirect(url_for("admin_page"))

        return render_template("admin_login.html")
@app.route('/admin_page')
def admin_page():
    if 'logged_in' in session:
        return render_template('admin_page.html')
    else:
        return redirect(url_for('admin_login'))
@app.route('/logout')
def logout():
   session.pop('logged_in', None)
   return redirect(url_for('index'))
您还需要一个注销端点来弹出会话变量:

@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
    if request.method == 'POST':
        login = request.form['login']
        passsword = request.form['password']

        if not 'logged_in' in session:
            if (login == 'admin') and (passsword == 'admin_pass'):
                session['logged_in'] = True
                return redirect(url_for("admin_page"))
            else:
                flash("Wrong login and passsword!")
                return render_template('admin_login.html')
        else:
            return redirect(url_for("admin_page"))

    else:
        if "logged_in" in session:
            return redirect(url_for("admin_page"))

        return render_template("admin_login.html")
@app.route('/admin_page')
def admin_page():
    if 'logged_in' in session:
        return render_template('admin_page.html')
    else:
        return redirect(url_for('admin_login'))
@app.route('/logout')
def logout():
   session.pop('logged_in', None)
   return redirect(url_for('index'))

web服务器中的全局变量没有意义。如果你做到了这一点,那么如果有人以管理员身份登录,那么其他任何人都可以自由访问/admin_页面!我知道,我只是想知道如何在web服务器中使用返回的登录的其他funcA全局变量没有任何意义。如果你做到了这一点,那么如果有人以管理员身份登录,那么其他任何人都可以自由访问/admin_页面!我知道,我只是想知道如何使用返回的登录其他函数