Настройка Flask сервера для нескольких одновременных пользователей - PullRequest
0 голосов
/ 28 мая 2020

Я готовлюсь к развертыванию своего первого приложения Flask на сервере, где несколько пользователей могут одновременно использовать веб-приложение. Должны быть установлены несколько ограничений: 1) Мы не хотим входить в систему аутентификации, просто разрешаем любому пользователю с URL-адресом получать доступ и использовать функции на сайте, 2) Никакие данные не могут быть отправлены в браузер клиента, все должно быть постоянно на стороне сервера. 3) Несколько пользователей могут независимо и одновременно использовать приложение и все его функции без конфликтов.

Я поделюсь кое-чем ниже, но я не уверен, поделюсь ли я фрагментами кода, которые приведут к решению моего вопроса. Рад поделиться (и узнать больше), когда я узнаю о развертывании этого типа приложения с Flask.

Во-первых, мое приложение огромно и поэтому организовано с использованием чертежей. Итак, ниже показано основное серверное приложение. Мои вопросы включают:

  1. В общих чертах, что мне нужно в моем основном серверном приложении, чтобы развернуть его для достижения трех целей, описанных выше? Я близко?
  2. Я еще не пользуюсь сессиями. Если мне нужно настроить сеанс, какие элементы мне нужны в этом коде для этого И для защиты данных от отправки с сервера клиенту?
  3. В моем маршруте ниже показан метод, который я использую на протяжении всего приложение для загрузки и использования файлов данных. Данные загружаются либо путем загрузки файла, либо захватываются с помощью запроса SQL, но общий подход, который я использую, тот же. Я загружаю данные, сохраняю их во временном местоположении, а затем перечитываю этот временный файл, когда с этими данными производятся новые действия. Верно ли это, если вы ожидаете нескольких пользователей? Будет ли конфликт в том смысле, что файлы будут называться одинаковыми или храниться в одном временном месте?

Локально все это прекрасно работает. Теперь пришло время масштабировать и развертывать на сервере разработки.

Ниже представлено мое основное серверное приложение:

from flask import Flask, render_template, request, session
from flask_session import Session 
server = Flask(__name__)
#server.config["SESSION_PERMANENT"] = False
#server.config["SESSION_TYPE"] = "filesystem"
server.secret_key = 'abcdefg'

### Import and Register Blueprints 
from Help.routes import help
from Datatools.routes import data_tools
from Configtools.routes import config_tools
from wordAnalyzer.routes import word_analyzer
from ScoringTools.routes import test_scoring

server.register_blueprint(help)
server.register_blueprint(data_tools)
server.register_blueprint(config_tools)
server.register_blueprint(word_analyzer)
server.register_blueprint(test_scoring)

@server.route('/')
def homepage():
    return render_template('index.html')          

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

А вот один маршрут из файла чертежа:

@data_tools.route('/dataTools', methods=['POST', 'GET'])
def data_tools_upload():
table = '<table></table>' 
result = '<table></table>' 
message = ''
var2use = None 
vars = ''
dt_name = ''
dtRadios = dtFormRadio(request.form)
if request.method == 'POST':
    tmp_filename = tempfile.gettempdir()+'\\input.csv'
    if request.files:
        to_upload = request.files.get('file')
        dt_name = str(to_upload).split()[1]
        if to_upload:
            f = request.files['file']
            f.save(tmp_filename)
    if os.path.exists(tmp_filename):
        orig_df = pd.read_csv(tmp_filename)
        vars = list(orig_df.columns)
        dtRadios.varlist.choices = vars 
        var2use = dtRadios.varlist.data 
        if var2use != None:
            indx = vars.index(var2use)
            if dtRadios.dtRadioList.data == 'descriptives':
                result = dt.get_descriptives(orig_df[vars[indx]])
            if dtRadios.dtRadioList.data == 'percentiles':
                result = dt.get_percentiles(orig_df[vars[indx]])
            if dtRadios.dtRadioList.data == 'frequency':
                if dtRadios.binSize.data != None:
                    bins = dtRadios.binSize.data
                result = dt.get_frequency(orig_df[vars[indx]], bins = bins)
            result = pd.DataFrame.from_dict(result, orient='index', columns = [var2use]).to_html(classes='table table-striped table-hover', header = "true", justify = "center")
        dims = orig_df.shape
        message = 'Data file %s with %s rows and %s columns loaded.' % (dt_name, dims[0],dims[1])
        table = orig_df.head(10).to_html(classes='data', header = "true")
return render_template('dataTools.html', results = [result], message = message, vars = vars, var_name = var2use, dtForm=dtRadios)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...