首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NameError:还没有定义名称“logged”,

NameError:还没有定义名称“logged”,
EN

Stack Overflow用户
提问于 2020-10-28 13:28:27
回答 1查看 260关注 0票数 0

我有一个Python代码,它使用framework,检查admin login (login= True)是否呈现管理页面,如果admin未被记录(login= False),则重定向到登录页面。

代码语言:javascript
复制
@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')

但我在if logged == True: - NameError: name 'logged' is not defined中遇到了一个错误.我试图使logged全球化,但没有起到任何作用。那么我如何定义logged并在函数admin_page中使用它呢?

EN

Stack Overflow用户

回答已采纳

发布于 2020-10-28 14:25:32

您应该避免在服务器上有一个全局logged_in变量。然后,任何人将被允许使用你的网站后,成功登录!您应该使用会话变量代替。

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

如果您还没有得到主脚本,那么将它添加到主脚本顶部的附近:

代码语言:javascript
复制
from flask import Flask, session, redirect, url_for, escape, request, flash
app = Flask(__name__)
app.secret_key = 'any random string’

然后将函数admin_login()更改为设置会话变量:

代码语言:javascript
复制
@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")

然后更改admin_page()函数以检查这个会话变量:

代码语言:javascript
复制
@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'))

您还需要一个注销结束点才能弹出会话变量:

代码语言:javascript
复制
@app.route('/logout')
def logout():
   session.pop('logged_in', None)
   return redirect(url_for('index'))
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64573878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档