Я готовлюсь к развертыванию своего первого приложения Flask на сервере, где несколько пользователей могут одновременно использовать веб-приложение. Должны быть установлены несколько ограничений: 1) Мы не хотим входить в систему аутентификации, просто разрешаем любому пользователю с URL-адресом получать доступ и использовать функции на сайте, 2) Никакие данные не могут быть отправлены в браузер клиента, все должно быть постоянно на стороне сервера. 3) Несколько пользователей могут независимо и одновременно использовать приложение и все его функции без конфликтов.
Я поделюсь кое-чем ниже, но я не уверен, поделюсь ли я фрагментами кода, которые приведут к решению моего вопроса. Рад поделиться (и узнать больше), когда я узнаю о развертывании этого типа приложения с Flask.
Во-первых, мое приложение огромно и поэтому организовано с использованием чертежей. Итак, ниже показано основное серверное приложение. Мои вопросы включают:
- В общих чертах, что мне нужно в моем основном серверном приложении, чтобы развернуть его для достижения трех целей, описанных выше? Я близко?
- Я еще не пользуюсь сессиями. Если мне нужно настроить сеанс, какие элементы мне нужны в этом коде для этого И для защиты данных от отправки с сервера клиенту?
- В моем маршруте ниже показан метод, который я использую на протяжении всего приложение для загрузки и использования файлов данных. Данные загружаются либо путем загрузки файла, либо захватываются с помощью запроса 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)