Как я могу использовать один и тот же маршрут для нескольких функций в Flask - PullRequest
0 голосов
/ 15 октября 2018

Я сейчас использую python3 и Flask;У меня есть две функции, определенные с использованием одного и того же маршрута.- Как я могу получить index2 для печати. ​​

from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/')
def index():
    if request.authorization and request.authorization.username == 'user1' and request.authorization.password == 'pass1':
        return '<h1>You are logged in</h1>'
    return make_response('Could not verify!', 401, {'WWW-Authenticate' : 'Basic realm="Login Required"'})

@app.route('/')
def index2():
    print('In Index 2')

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

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

У вас есть несколько вариантов;одна из них заключается в вызове функции index2 из функции index:

from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/')
def index():
    if request.authorization.username == 'user1' and request.authorization.password == 'pass1':
        index2() # you can return index2() if that's the logged in page.
        return '<h1>You are logged in</h1>'

    return make_response('Could not verify!', 401, {'WWW-Authenticate' : 'Basic realm="Login Required"'})


def index2():
    print('In Index2')

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

Второй вариант заключается в различении обеих функций в зависимости от вызываемого метода http:

from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/')
def index():
    if request.authorization.username == 'user1' and request.authorization.password == 'pass1':
        return '<h1>You are logged in</h1>'

    return make_response('Could not verify!', 401, {'WWW-Authenticate' : 'Basic realm="Login Required"'})

@app.route('/', methods=['POST'])
def save():
    print('Save operations here')

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

Третий вариант - использовать разные параметры:

from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/')
def index():
    if request.authorization.username == 'user1' and request.authorization.password == 'pass1':
        return '<h1>You are logged in</h1>'

    return make_response('Could not verify!', 401, {'WWW-Authenticate' : 'Basic realm="Login Required"'})

@app.route('/<string:page_name>')
def index2(page_name):
    print(f"{page_name}")

if __name__ == '__main__':
    app.run(debug=True)
0 голосов
/ 16 октября 2018

Чтобы вызвать index2, попробуйте следующий быстрый и грязный код.Я уверен, что вы можете улучшить его, чтобы он соответствовал вашим потребностям.

@app.route('/')
def index():
    if request.authorization and request.authorization.username == 'user1' and request.authorization.password == 'pass1':
        return '<h1>You are logged in</h1> <a href="{{ url_for('index2') }}">Click me to go to index2</a>'

    return make_response('Could not verify!', 401, {'WWW-Authenticate' : 'Basic realm="Login Required"'})

@app.route('/index2')
def index2():
    print ('In Index2')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...