Flask Blueprint: как запустить каждое приложение в другой порт?

Я получил колбу с различными приложениями внутри, используя BluePrint. Чтобы упростить, я получил API, который управляет веб-аутентификацией токена (и многими другими функциями данных) и веб-сайт, который должен вызвать API для получения действительного токена, используя базовую аутентификацию для начала с

Проблема в том, что когда веб-сайт запрашивает API, он никогда не получает никаких отзывов от API.

Запрос API через POSTMAN работает как чудо, но этот вызов ниже, сделанный с маршрута веб-сайта, ждет, ждет, ждет и никогда не заканчивается.

Таким образом, я предполагаю, что использование одного и того же порта для веб-сайта и API является проблемой

Конечно, я мог бы разделить флягу на 2 приложения фляги с 2 серверами, но есть много объектов и инструментов, которые разделяют и API, и веб-сайт, поэтому я не хочу удваивать работу

Благодарю.

звонок с сайта

from requests.auth import HTTPBasicAuth
import requests

mod = Blueprint('site', __name__, template_folder='templates/login')

def load_user(username, password):
     data = requests.get('http://127.0.0.1:5000/api/login', 
                 auth=HTTPBasicAuth('username', 'password'))
     return data

@mod.route('/')
def index():
     username = 'jeje'
     password = 'jeje'
     data = load_user(username, password)
     return '<h1>load user<h1>'

функция API

@mod.route('/login')
def login():
    resu = True
    auth = request.authorization
    if not auth or not auth.username or not auth.password:
        resu = False
    user = USER.query.filter_by(username = auth.username).first()
    if not user:
        resu = False

    if validehash(user.password, auth.password):
        period_in_mn = 120
        payload = {
            'public_id':user.public_id,
            'exp' : datetime.datetime.utcnow() + datetime.timedelta(minutes = period_in_mn)
        }
        token = createtoken(payload, current_app.config['SECRET_KEY'])
    if resu:
        return jsonify({'token' : token })
    else:
        return jsonify({'token' : 'unknown'})

1 ответ

Я думаю, что вы используете колбу 0,12 вместо 1,0. Итак, здесь происходит то, что вы запрашиваете маршрут из другого маршрута.

Ваш браузер запрашивает /и в вашей индексной функции вы запрашиваете /login, Но процесс колбы все еще работает на / запрос от браузера, и не может принимать другие запросы, потому что колба 0.12 работает только на одном ядре.

Запрашивать как это плохой дизайн. Вы можете создать вспомогательную функцию, которая возвращает одни и те же данные в разных запросах (api или основной сайт), или вы можете заставить браузер отправлять другой запрос, используя AJAX.

Flask 1.0 имеет многоядерную поддержку, поэтому я думаю, что это может сработать, но я действительно думаю, что вы должны изменить свой дизайн. Кстати, это не имеет ничего общего с чертежами.

from flask import Flask, redirect
import requests

app = Flask(__name__)

@app.route('/')
def index():
    result = requests.get('http://127.0.0.1:5000/api/login')
    return 'this is the index<br>' + result.text

@app.route('/api/login')
def login():
    return 'you are logged in'

Использование колбы 0.12, время ожидания при посещении http://127.0.0.1:5000/,

Используя колбу 1.0, возвращает this is the index you are logged in при посещении http://127.0.0.1:5000/,

Другие вопросы по тегам