Что не так с переводом? Если я делаю свои примечания и вставки, то указываю их явно. Всё остальное соответствует оригинальной статье. Я ничего не удаляю. Соглашусь с автором оригинала, что нет смысла по несколько раз приводить один и тот же ранее написанный код. Изменения носят именно структурный характер. В статье описывается сама идея и логика новой структуры, как она должна работать.
Честно скажу, что рассматривал вариант Яндекс Переводчик API, но бесплатных тарифов у них сейчас нет, по завершению перевода всей серии планирую вернуться к этому вопросу.
Возможно проще, но это перевод, у автора учебника такое виденье, так же в следующей главе будет использоваться перевод сообщений пользователей, где так же будет использоваться g.locale, а единый и универсальный подход ко всему более правильный и масштабируемый. Действительно удобно знать, что все параметры локали берутся из одного места, а не независимо каждым расширением через собственные алгоритмы.
В главе указано как работает Flask-Moment и какие принимает аргументы.
Если вы не знакомы со стандартным форматом даты и времени ISO 8601, этот формат выглядит следующим образом:
{yyyy}-{mm}-{dd}T{hh}:{mm}:{ss}{tz}
Итак, как вы можете видеть, Flask-Moment использует синтаксис, аналогичный синтаксису библиотеки JavaScript, с одним отличием, заключающимся в том, что аргументом для moment() теперь является объект Python datetime, а не строка ISO 8601. Вызов moment(), выполняемый из шаблона, автоматически генерирует необходимый код JavaScript для вставки отображаемой временной метки в нужное место DOM.
Соответственно вам нужно в метод format передать метку вашей временной зоны, что-то вроде +03:00, более подробно в документации Flask-Moment и Moment.js
Если речь идёт о конкретном пользовале, то в 21 главе будет реализована система личных сообщений и уведомлений пользователей, либо можете добавить ещё одно поле в модель пользователя, на подобии как поле "О себе", и вывести его в в шаблоне base.html.
Попробуйте такой способ, это называется отложенная инициализация и будет объяснена в 15 главе
mail = Mail()
app = Flask(__name__)
app.config.from_object(Config)
mail.init_app(app)
Если у вас нормально отрабатывают другие расширения, то посмотрите файл /app/mail.py, возможно в функции send_async_email(app, msg) не активируется контекст приложения, функции расширений во время выполнения обращаются к контексту приложения и берут сами все необходимые параметры, в flask shell вы отправляете сообщение в том же потоке, где контекст приложения загружен по умолчанию.
По текущему коду можно сказать, что вы собираетесь использовать эмулируемый сервер на своём компьютере, для определения проблемы нужны логи в момент ошибки и описание при каких действиях она появляется
Если вы не планируете хранить какие-то данные по каждому пользователю, а просто предоставлять равный обезличенный доступ к приложению после авторизации, то база данных действительно не нужна, но класс пользователя должен быть точно, для простоты вы можете так же наследовать класс UserMixin, но переопределить метод get_id(), который должен что-то возвращать вам, хотя бы просто значение True, аналогично с загрузкой пользователя, вы можете передавать любое значение в load_user() главное чтобы была согласованность, а возвращаемым объектом был экземпляр пользователя.
Но авторизация через Active Directory не исключает наличие базы данных у приложения, вы таким образом просто перекладываете проверку подлинности учётных данных пользователя на другую службу.
В главе 4, а именно в разделе "Контекст оболочки" описывается как настроить и запускать приложение, чтобы при работе с интерпретатором в начале каждого сеанса больше не требовался импорт используемых модулей.
Спасибо за совет, по завершению перевода я планирую дополнительно пройти по каждой статье и отредактировать на основании полученных советов и замечаний
На текущий момент приложение действительно не требует такой сложной структуры, но к 15 главе оно ощутимо разрастётся и будет реструктуризовано в ещё более сложную форму с использованием Blueprints, где каждая подсистема будет независима и легко переносима в другое приложение. Автор учебника показывает как правильно вести разработку от начала и до конца, с возможностью дальнейшей поддержки и перспективой расширения.
Спасибо большое за подробный гайд, уверен многие воспользуются им. И отдельное спасибо за рекомендацию по литературе.
Что не так с переводом? Если я делаю свои примечания и вставки, то указываю их явно. Всё остальное соответствует оригинальной статье. Я ничего не удаляю. Соглашусь с автором оригинала, что нет смысла по несколько раз приводить один и тот же ранее написанный код. Изменения носят именно структурный характер. В статье описывается сама идея и логика новой структуры, как она должна работать.
Тема с gmail взята полностью из оригинальной статьи и материал проверен временем, поскольку в учебнике 2018 происходит аналогичная настройка.
О каком примере идёт речь?
Честно скажу, что рассматривал вариант Яндекс Переводчик API, но бесплатных тарифов у них сейчас нет, по завершению перевода всей серии планирую вернуться к этому вопросу.
Возможно проще, но это перевод, у автора учебника такое виденье, так же в следующей главе будет использоваться перевод сообщений пользователей, где так же будет использоваться
g.locale
, а единый и универсальный подход ко всему более правильный и масштабируемый. Действительно удобно знать, что все параметры локали берутся из одного места, а не независимо каждым расширением через собственные алгоритмы.В главе указано как работает Flask-Moment и какие принимает аргументы.
Соответственно вам нужно в метод format передать метку вашей временной зоны, что-то вроде +03:00, более подробно в документации Flask-Moment и Moment.js
Заменил, спасибо, что написали
Заменил, спасибо, что написали.
Если речь идёт о конкретном пользовале, то в 21 главе будет реализована система личных сообщений и уведомлений пользователей, либо можете добавить ещё одно поле в модель пользователя, на подобии как поле "О себе", и вывести его в в шаблоне base.html.
Попробуйте такой способ, это называется отложенная инициализация и будет объяснена в 15 главе
Если у вас нормально отрабатывают другие расширения, то посмотрите файл /app/mail.py, возможно в функции send_async_email(app, msg) не активируется контекст приложения, функции расширений во время выполнения обращаются к контексту приложения и берут сами все необходимые параметры, в flask shell вы отправляете сообщение в том же потоке, где контекст приложения загружен по умолчанию.
По текущему коду можно сказать, что вы собираетесь использовать эмулируемый сервер на своём компьютере, для определения проблемы нужны логи в момент ошибки и описание при каких действиях она появляется
Если вы не планируете хранить какие-то данные по каждому пользователю, а просто предоставлять равный обезличенный доступ к приложению после авторизации, то база данных действительно не нужна, но класс пользователя должен быть точно, для простоты вы можете так же наследовать класс UserMixin, но переопределить метод
get_id()
, который должен что-то возвращать вам, хотя бы просто значениеTrue
, аналогично с загрузкой пользователя, вы можете передавать любое значение вload_user()
главное чтобы была согласованность, а возвращаемым объектом был экземпляр пользователя.Но авторизация через Active Directory не исключает наличие базы данных у приложения, вы таким образом просто перекладываете проверку подлинности учётных данных пользователя на другую службу.
Спасибо, поправил))
Спасибо, поправил))
В главе 4, а именно в разделе "Контекст оболочки" описывается как настроить и запускать приложение, чтобы при работе с интерпретатором в начале каждого сеанса больше не требовался импорт используемых модулей.
Спасибо за совет, по завершению перевода я планирую дополнительно пройти по каждой статье и отредактировать на основании полученных советов и замечаний
На текущий момент приложение действительно не требует такой сложной структуры, но к 15 главе оно ощутимо разрастётся и будет реструктуризовано в ещё более сложную форму с использованием Blueprints, где каждая подсистема будет независима и легко переносима в другое приложение. Автор учебника показывает как правильно вести разработку от начала и до конца, с возможностью дальнейшей поддержки и перспективой расширения.
Спасибо за внимательность, исправил.
Перейти в профиль интересующего пользователя, справа будет зелёная надпись "Подписаться"