Декоратор не вызывается в других функциях - PullRequest
0 голосов
/ 02 февраля 2019

Кажется, что декоратор (@need_to_login) не работает в моем коде, потому что когда я открываю веб-страницу, она идет прямо на домашнюю страницу, а не на страницу входа.это простой код ниже.если есть какие-либо видимые ошибки, пожалуйста, сообщите мне.Я довольно новичок в этом.спасибо

from flask import Flask, render_template, redirect, url_for, request, session, flash
from functools import wraps

app = Flask(__name__)
app.secret_key='nelliville'

def need_to_login(f):
    @wraps(f)
    def wrap(*args, **kwargs):
        if 'logged_in' in session:
            return f(*args, **kwargs)
        else:
            flash('You need to log in first')
            return redirect(url_for('login'))
    return wrap

@app.route('/login', methods = ['GET', 'POST'])
def login():
    error = None
    if request.method =='POST':
        if request.form['username'] != 'admin' and request.form['password'] != 'admin':
            return 'Invalid credentials'    
        else:
            session['logged_in'] = True
            return redirect(url_for('home'))
    return render_template('login.html', error=error)

@app.route('/')
@need_to_login
def home():
    return render_template('home.html')

@app.route('/logout')
@need_to_login
def logout():
    session.pop('logged_in', None)
    return redirect(url_for('login'))

if __name__ == "__main__":
    app.run(debug=True)

1 Ответ

0 голосов
/ 03 февраля 2019

Хорошо, поэтому я не могу комментировать, так как у меня недостаточно репутации, поскольку я новичок в стеке переполнения.попробуйте удалить @wraps(f) в вашем need_to_login(f)

...