почему мой код пропускает мою индексную страницу?

Всякий раз, когда я захожу на сайт входа (0.0.0.0:5000/), страница немедленно возвращается к 0.0.0.0:5000/admin. Любые идеи о том, почему это происходит?

работает через yocto на intel edison. редактирование через шпатлевку

@app.errorhandler(404)
@app.errorhandler(500)
def errorpage(e):
    return render_template('404.html')

def login_required(f):
    @wraps(f)
    def wrap(*args, **kwargs):
        if 'logged_in' in session:
            return f(*args, **kwargs)
        else:
            flash('please login first.')
            return redirect (url_for('index'))
    return wrap

@app.route('/', methods=['GET','POST'])
def index():
    error = None
    if  request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'password':
            error = 'invalid attempt.'

    else:
        session['logged_in'] = True
        return redirect(url_for('admin'))
    return render_template('index.html', error = error)

@app.route('/logout')
def logout():
    session.pop('logged_in', None)
    return render_template('/logout.html')

@app.route('/admin',methods=['GET','POST'])
@login_required
def admin():

person Zane    schedule 22.04.2017    source источник
comment
Это изображение едва читается с таким выбором размера и цвета шрифта. Пожалуйста, вставьте актуальный код.   -  person Maria Ines Parnisari    schedule 23.04.2017
comment
Любая подсказка, как скопировать и вставить из vi через замазку?   -  person Zane    schedule 23.04.2017
comment
Посмотрите, поможет ли это: stackoverflow.com/questions/16741511/   -  person Maria Ines Parnisari    schedule 23.04.2017
comment
получил это с помощью pscp. заранее спасибо   -  person Zane    schedule 23.04.2017


Ответы (1)


Похоже, что как только кто-то переходит на страницу с GET, она устанавливается как logged_in = True и перенаправляется на /admin.

@app.route('/', methods=['GET','POST'])
def index():
    error = None
    if  request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'password':
            error = 'invalid attempt.'

    else: # this is always triggered for GETs, even if not logged in!
        session['logged_in'] = True
        return redirect(url_for('admin'))
    return render_template('index.html', error = error)

Вместо этого вы должны проверить, что они уже вошли в систему, и вместо этого установить свойство logged_in в блоке POST после проверки учетных данных.

На самом деле, похоже, что у вас отключен отступ в блоке else:

@app.route('/', methods=['GET','POST'])
def index():
    error = None
    if  request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'password':
            error = 'invalid'
        else: # this indenting should work now
            session['logged_in'] = True
            return redirect(url_for('admin'))

    return render_template('index.html', error = error)
person Zac Faragher    schedule 22.04.2017
comment
это сработало! Спасибо. любой совет, почему использование admin и пароля в соответствующих полях активирует обработчик ошибок? - person Zane; 23.04.2017
comment
Понятия не имею, извините, Flask — это не то, чем я обычно пользуюсь. - person Zac Faragher; 23.04.2017