Как передать аргументы при замораживании приложения flask? - PullRequest
0 голосов
/ 03 августа 2020

Я хочу развернуть свое приложение flask для netlify. Я понял, что для этого мне сначала нужно его заморозить. Вот как я его запускал до сих пор:

from flask import Flask, jsonify, request
from flask_cors import CORS, cross_origin
import requests
import json
from flask_frozen import Freezer

app = Flask(__name__)
CORS(app)

@app.route('/api')
def api():
    data = dict(request.args)
    print(data)
    url = f"https://www.google.com/search?q={data['question']}"
    x = requests.post(url=url, data=json.dumps(data))
    return 'Hello world'

app.run()

Это работает нормально. Если я хочу его заморозить, я добавляю:

from flask import Flask, jsonify, request
from flask_cors import CORS, cross_origin
import requests
import json
from flask_frozen import Freezer

app = Flask(__name__)
CORS(app)
freezer = Freezer(app)


@app.route('/api')
def api():
    data = dict(request.args)
    print(data)
    url = f"https://www.google.com/search?q={data['question']}"
    x = requests.post(url=url, data=json.dumps(data))
    return 'Hello world'

freezer.register_generator(api)
freezer.freeze()

Получаю сообщение об ошибке:

url = f "https://www.google.com/search?q= {data ['question']}"

KeyError: 'question'

...

ValueError: неожиданный статус «500 ВНУТРЕННЯЯ ОШИБКА СЕРВЕРА» на URL / api

I ' я также пробовал

@app.route('/api/<question>')
def api(question):
    data = dict(request.args)

, который отлично работает при запуске приложения. Но когда я его замораживаю, я получаю:

TypeError: api () отсутствует 1 обязательный позиционный аргумент: 'question'

Как мне заморозить свое приложение, чтобы я развернуть?

1 Ответ

1 голос
/ 03 августа 2020

Flask-Frozen - это расширение, которое позволяет конвертировать приложение Flask в набор файлов c HTML для развертывания на стандартном веб-сервере, который не поддерживает Python.

Это будет отлично работать, если ваш сайт имеет предопределенный набор конечных точек / страниц (например, интерфейс для приложения блога), где все маршруты c могут быть сгенерированы из известного набора входов в базу данных.

Однако это не сработает для вашего кода, который вызывает requests.post по URL-адресу Google. Чтобы это работало, вам нужно знать все возможные наборы терминов, которые может ввести пользователь, и во время процесса «замораживания» он будет делать бесчисленные запросы к этому URL-адресу, чтобы сгенерировать страницы stati c, которые вы будете размещать. .

Не путайте эту библиотеку с отдельной командой pip freeze, которая является методом закрепления ваших требований Python в среде, обычно в файле requirements.txt.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...