#python #flask #python-import
#python #flask #python-импорт
Вопрос:
Я смущен импортом пользовательских модулей. Как вы можете видеть в приведенном ниже коде, в main я сначала импортирую все библиотеки, необходимые для всего, И что я дублировал эти импорта в моем i_setup_functions.py досье. Исключение любого из них из любого файла создало ошибки. То же самое с дублированием «app = Flask (name)». Я действительно надеюсь, что избыточность неверна, и есть какой-то простой способ исправить это. Все, что я хочу сделать, это включить настройку сеансов, электронной почты, подключения к данным и т.д. Здесь показаны только сеансы для простоты.
Кстати: все приложение работало без ошибок, пока я не попытался модулировать.
Сообщение об ошибке:
RuntimeError: The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.
Это сообщение об ошибке указывает на строку в функции в середине main.py который пытается создать сеанс.
Спасибо за любые идеи, которыми вы все можете поделиться!
main.py:
from flask import session
import random
from datetime import datetime, timedelta
from i_setup_functions import setup_sessions
app = Flask(__name__)
# is the following line even necessary in either module?
application = app
setup_sessions()
setup_mail()
setup_logging()
[snip]
# Error here:
session["id_user"] = id_user
i_setup_functions.py
from flask import session
import random
from datetime import datetime, timedelta
from i_setup_functions import setup_sessions
app = Flask(__name__)
application = app
def setup_sessions():
random.seed(datetime.now())
app.config['SECRET_KEY'] = str(random.randint(1, 500)) "jibber" str(random.randint(1, 500)) "jabber"
app.permanent_session_lifetime = timedelta(days=30)
return True
Комментарии:
1. Вы пробовали использовать
setup_sessions()
takeapp
в качестве параметра вместо того, чтобы делать его переменной уровня файла, а затем передаватьapp
егоmain.py
при вызовеsetup_sessions()
? Вам вообще не нужно назначатьapplication
, если вы просто не хотите иметь доступ к переменной с любым именем.2. Это сработало! И научил меня еще одной вещи о Python. Спасибо!
3. Любые идеи о том, как интерпретатор, похоже, хочет, чтобы я импортировал те же библиотеки в main.py и i_setup_functions.py ? Как мне обойти это? Кажется слишком избыточным, чтобы быть правильным. Должен ли я задавать это как отдельный / новый вопрос о стеке?
4. Если вам нужно напрямую обратиться к модулю, вам необходимо импортировать модуль в тот же файл. Не беспокойтесь об импорте одного и того же модуля в двух разных файлах — python умен, и оба импорта будут указывать на один и тот же загруженный объект в памяти (модуль загружается только один раз, даже если импортируется во многих разных файлах). Суть в ясности — если я смотрю на один файл, я должен быть в состоянии знать, откуда берется каждая отдельная функция, без необходимости смотреть на остальную часть программы (в отличие, скажем, от C / C ).
Ответ №1:
Вы создаете два (или более?) разделите приложения и установите значение SECRET_KEY
на то, которое не обслуживает ваше приложение.
Чтобы исправить это, удалите все app = Flask(__name__)
вызовы из всех модулей, кроме main.py
. Затем передайте app
созданное вами во main.py
все нужные вам места.
from flask import session
import random
from datetime import datetime, timedelta
from i_setup_functions import setup_sessions
app = Flask(__name__)
setup_sessions(app)
setup_mail(app)
setup_logging(app)
[snip]
session["id_user"] = id_user
Комментарии:
1. Спасибо!!! Это сработало! Любые идеи о том, как интерпретатор, похоже , хочет, чтобы я импортировал те же библиотеки в main.py и i_setup_functions.py ? Как мне обойти это? Кажется слишком избыточным, чтобы быть правильным.
2. Как он хочет , чтобы вы их импортировали? Отображается ли предупреждение или ошибка? Я не уверен, что понимаю проблему.