我正在使用RESTful API
构建Flask
,目前有两个页面(login
页面和index
页面。)
只有在用户登录后才能访问index
页面。
目前我有:
@app.route('/venue/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
venue_owner_email = request.form['username']
venue_owner_password = request.form['password']
with contextlib.closing(DBSession()) as session:
try:
venue = session.query(Venue).filter_by(venue_owner_email=venue_owner_email).first()
if not venue or not pwd_context.verify(venue_owner_password, venue.venue_owner_password):
error = 'Invalid Credentials. Please try again.'
else:
return redirect(url_for('index'))
except exc.SQLAlchemyError, error:
session.rollback()
raise_database_error(error)
return render_template('login.html', error=error)
@app.route('/', methods = ['GET'])
def index():
return render_template('index.html')
目前index.html
可通过/
访问/venue/login
,但我只希望通过@auth.login_required
访问,而不是直接通过浏览器访问。
如果我使用装饰器redirect
,当user
发生时,HTTP Authorisation Header
必须重新输入其凭据。有没有办法在redirecting
时发送redirect
?
我还想过而不是使用render_template
,我可能只是使用total = 25
fragment = 10
for start in xrange(0, total, fragment):
print "start = ", start
for i in range(start, min([start + fragment, total])):
print i
,但我不知道这是否是正确的做法。
如何正确地解决这个问题的任何帮助将不胜感激。
答案 0 :(得分:1)
您可以向检查引荐网址的index.html
添加装饰器。如果引用网址为/venue/login
,您应该为该网页提供服务,否则会返回错误。
if request.referrer == <venue login url>:
# continue
else:
# return error message