我有一个烧瓶应用程序正在使用flask_login
,说“请登录以访问此页面”
这是我的model.py
class Trainer(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
trainer_name = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
pokemon = db.relationship('Pokemon', backref='pokemon', lazy='dynamic')
def set_password(self, password):
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
def __repr__(self):
return '<Trainer {}>'.format(self.trainer_name)
@login.user_loader
def load_user(id):
return Trainer.query.get(int(id))
这是routes.py
@app.route('/')
@app.route('/index')
@login_required
def index():
pokemon = [
{
'name': 'Jolteon',
'metaData': {
'type': 'Electric',
'moves': [
{'name': 'Thunderbolt'},
{'name': 'Tackle'}
]
}
},
{
'name': 'Eevee',
'metaData': {
'type': 'Normal',
'moves': [
{'name': 'Tackle'},
{'name': 'Tail Whip'}
]
}
}
]
return render_template('index.html', title='Home', pokemon=pokemon)
@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
trainer = Trainer.query.filter_by(trainer_name=form.trainer_name.data).first()
if trainer is None or not trainer.check_password(form.password.data):
flash('Invalid username or password')
return redirect(url_for('login'))
login_user(trainer, remember=form.remember_me.data)
next_page = request.args.get('next')
if not next_page or url_parse(next_page).netloc != '':
next_page = url_for('index')
return redirect(next_page)
return render_template('login.html', title='Sign In', form=form)
我注意到,即使我将登录页面指定为“登录”
在我的init.py
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
login = LoginManager(app)
login.login_view = 'login'
我注意到,当我启动flask应用程序时,它会将我发送到这里:localhost:5000/login?next=%2F
如果我导航到
localhost:5000/login
那我没有bug
我认为我的问题是URL的下一部分,但是我不确定这是怎么到达的,我调试了我的应用程序,甚至没有触及处理next_page
的那一部分。我是python和flask的新手,所以将不胜感激!
谢谢
编辑:我已经包括了更新的routes.py。我认为我的错误是我误解了init.py在做什么。我想当应用启动时,它会将您发送到那里。我可以看到为什么我会落在'/'上并被重定向,这会引起我遇到的问题。谢谢