Основы колбу - знак пользователя в


Эти функции более или менее то же самое. Они делают вход в процесс для приложения флягу. Пользователь извлекаются из базы данных (выявленных с помощью адреса электронной почты) и пароль проверяется на валидность (осуществляется). Если это не удалось, ошибка должна отображаться для пользователя в шаблоне (signin.html).

Что считается более читабельным или элегантный. Есть другие, приятнее решения?

@app.route('/signin', methods=['POST'])
@public
def do_signin():
    user = get_user_by_email([request.form.get('email')])
    invalid = user is None or not bcrypt.checkpw(
        request.form.get('password').encode('utf-8'),
        user['password'].encode('utf-8'),
    )

    if invalid:
        error = 'Invalid Email or Password'
    else:
        session[SESSION_TOKEN] = add_token(user['id'])
        return redirect(url_for('index'))
    return render_template('signin.html', error=error or None)

или

@app.route('/signin', methods=['POST'])
@public
def do_signin():
    user = get_user_by_email([request.form.get('email')])
    error = 'Invalid Email or Password' if user is None or not bcrypt.checkpw(
        request.form.get('password').encode('utf-8'),
        user['password'].encode('utf-8'),
    ) else None

    if error is None:
        session[SESSION_TOKEN] = add_token(user['id'])
        return redirect(url_for('index'))
    return render_template('signin.html', error=error or None)

или

@app.route('/signin', methods=['POST'])
@public
def do_signin():
    user = get_user_by_email([request.form.get('email')])

    if user is None:
        error = 'Invalid Email or Password'
    elif not bcrypt.checkpw(
        request.form.get('password').encode('utf-8'),
        user['password'].encode('utf-8')
    ):
        error = 'Invalid Email or Password'
    else:
        session[SESSION_TOKEN] = add_token(user['id'])
        return redirect(url_for('index'))
    return render_template('signin.html', error=error or None)


Комментарии
1 ответ

Есть несколько вещей, которые беспокоят меня в одной версии или другие:


  • в error=error or None является излишним, поскольку error либо назначается 'Invalid Email or Password' или Noneпридерживайтесь проще error=error;

  • в ): на отдельной строке в третьей версии это более чем тревожно, он чувствует, как синтаксическая ошибка и заставить читателя пройти через код снова, чтобы понять, что происходит. Вместо этого, поместите его в конец предыдущей строки и включить больше отступ, чтобы отличить состояние от остальных.;

  • каждая версия, похоже, считают успех делом как ошибки случае, то есть при чтении кода не чувствую, как будто это signin функция (это похоже на плохой исход), а deny_access функции;

  • третья версия, похоже, принимает неверный пароль и запретить вход на удачные пароли.

Вместо этого, я хотел проверить каждую неудачу состоянии и выручить с конкретным сообщением об ошибке в этот момент, а не делать в случае ошибки "естественная" точка выхода из функции:

@app.route('/signin', methods=['POST'])
@public
def do_signin():
user = get_user_by_email([request.form.get('email')])
if user is None:
return render_template('signin.html', error='Invalid Email')

if not bcrypt.checkpw(
request.form.get('password').encode('utf-8'),
user['password'].encode('utf-8')):
return render_template('signin.html', error='Invalid Password')

session[SESSION_TOKEN] = add_token(user['id'])
return redirect(url_for('index'))

3
ответ дан 6 марта 2018 в 04:03 Источник Поделиться