Создание пользователей в текстовом или JSON-файле и использование его для входа в сеть Python - PullRequest
0 голосов
/ 23 октября 2018

Я сделал простую сеть.Это метод, который я использую для базового входа в Интернет:

@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), который содержит информацию о пользователях (адрес электронной почты, пароль и т. д.)?Как сравнить введенную строку в форме входа с содержимым файла?

1 Ответ

0 голосов
/ 24 октября 2018

Я предполагаю, что у вас есть текстовый файл с содержанием 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)
...