首页 > 解决方案 > 在文本或 json 文件中创建用户并将其用于登录 python 网络

问题描述

我做了简单的网络。这是我用来基本登录网络的方法:

@app.route('/signin/', methods=['GET', 'POST'])
def signin_page():
    error = None
    try:
        if request.method == "POST":
            attempted_email= request.form['email']
            attempted_password = request.form['password']

            flash(attempted_email)
            flash(attempted_password)

            if attempted_email == "admin@gmail.com" and attempted_password == "admin":
                return redirect(url_for('homepage'))
            else:
                error = "Invalid credentials. Try again."

    except Exception as e:
        flash(e)
        return render_template("signin.html", error = error)

如果我想从包含用户信息(电子邮件、密码等)的 txt 或 json 文件(我想使用基本编辑器 txt 制作)中获取用户数据,我该如何修改该代码?如何将登录表单中键入的字符串与文件内容进行比较?

标签: pythonhtmlwebflasklogin

解决方案


我假设您有一个包含内容的文本文件username:password。您现在可以执行以下操作:

PW_FILE = 'path/to/file/'

def check_credentials(username: str, password: str) -> bool:
    # load content of file
    with open(PW_FILE) as fh:
        content = fh.read().strip('\n')  # and remove newlines
    credentials = content.split(':', 1)  # get credentials as list `[username, password]`
    return credentials == [username, password]


@app.route('/signin/', methods=['GET', 'POST'])
def signin_page():
    ...
        if check_credentials(attempted_email, attempted_password):
            return redirect(url_for('homepage'))
        else:
            error = "Invalid credentials. Try again." 
    ...

通常,您不应该捕获非特定异常,因为您可能会吞下一些意外行为。我不熟悉您使用的框架,但我建议您将错误处理更改为更具体,例如

@app.route('/signin/', methods=['GET', 'POST'])
def signin_page():
    error = None
    if request.method == "POST":
        try:
            attempted_email= request.form['email']
            attempted_password = request.form['password']
        except KeyError:
            error = "Missing form data"
        else:
            if check_credentials(attempted_email, attempted_password):
               return redirect(url_for('homepage'))
            else:
                error = "Invalid credentials. Try again."
        return render_template("signin.html", error = error)

推荐阅读