Все потоки
Поиск
Написать публикацию
Обновить
15
0
Вовчик @microcoder

Пользователь

Отправить сообщение

Мне не понятна вот эта схема:


app/__init__.py


    # ...
    from app.errors import bp as errors_bp
    app.register_blueprint(errors_bp)
    # ...

app/errors/__init__.py


    # ...
    bp = Blueprint('errors', __name__)

    from app.errors import handlers

Что выполняет или делает вот эта строчка — from app.errors import handlers? Что происходит, когда выполняется from app.errors import bp as errors_bp в файле app/__init__.py?

Также, не могу разобраться с импортами. Что-то очень сложное для меня, никак не логичное. Просьба помочь. Пример:


В приложении есть Blueprint main, в файле app/main/__init__.py происходит его инициализация:


from flask import Blueprint

bp = Blueprint('main', __name__)

from app.main import routes

Что означает последняя строчка? Импортировать все объекты? Т.е. Они (или код) фактически "вставятся" в этот файл (app/main/__init__.py)? Если так, то зачем в app/main/routes.py есть свой "from app import bp", если переменная bp уже есть в этом (app/main/__init__.py) модуле? Попробовал закомментировать импорт в app/main/routes.py, получаю ошибку.
Просто не понятна логика импортирования. Где можно вразумится, как это в Пайтоне работает?

Дополнение к вопросу: А как тогда приложение связывается с экземпляром db например в app/modeles.py где есть только импорт?


from app import db
...
class User(UserMixin, db.Model):
...
Итак, как же db узнает, что должен использовать экземпляр self.app, который я только что создал?

Не смог этого понять. Зачем db узнавать, если он и так уже знает о приложении?


В app/test.py сейчас создается приложение, в методе setUp:


...
from app import create_app, db
...

class UserModelCase(unittest.TestCase):
        def setUp(self):
                self.app = create_app(TestConfig)
                ...

А вот код в app/__init__.py которое создает приложение и передает его в экземпляр db:


def create_app(config=Config, name=__name__):
    ...
    app = Flask(name)
    app.config.from_object(config)

    db.init_app(app)
    ...

Получается, это какие-то разные экземпляры db? И как они получаются разными?


  • Первый это при импорте в app/test.py?
  • Второй при создании приложения в app/test.py и вызове метода create_app?

Если команда импорт, импортирует экземпляр db из app/__init__.py, который еще не знает о существовании экземпляра приложения, но позже происходит создание приложения методом create_app(TestConfig) в котором экземпляр db инициализируется только что созданным экземпляром приложения. Зачем еще нужны контексты? Вообще не понимаю, что происходит и как это понять.

Привет!


Может кто подскажет, в разделе "Отображение ссылки «Перевести»" не понятно, откуда в шаблонах берётся функция _ (подчёркивание) из пакета Babel? Как она туда импортируется? Где это зашито и как поменять? В app/__init__.py у меня используется альяс t:


from flask_babel import Babel, lazy_gettext as t

Но он в шаблонах не доступен. Как использовать в шаблонах t вместо _ ?

Ошибки по тексту. Просьба поправить:


Стандартная практика — отвечать (respond) на (request) запроса POST

Поправить гиперссылку, после протокола http не указано двоеточие, в результате ссылка генерируется неправильно — http://https//youtu.be/DjVB2P15iUo и перейти по ней сейчас невозможно. Также, на ваше усмотрение, возможно, respond заменить на response, наверное в этом нет ошибки, но чаще в документах встречается пара — request/response.


Этот простой трюк не что иное, как паттерн Post/Redirect/Get..

Это аналогичная ошибка как в предыдущем пункте. Необходимо поправить гиперссылку

Может кто подскажет, как реализовать/записать выражение в SQLAlchimy так, чтобы SQL-выражение JOIN'а было с ключевым словом AND? Например:


SELECT *
  FROM table1 t1
  JOIN table2 t2 ON t1.id = t2.id AND t2.name like '%Вася%'

В некоторых СУБД такой зарос даёт гигантское ускорение вместо фильтра WHERE (оно и понятно почему) который может быть после джойна.

К этой статье указаны одни из следующих тегов: flowers, flowed
Это шутка такая, намеренно сделано? Или это опечатка и вместо последователей внесены цветочки и течь? ))

и при этом не понятно, как работает count() в конструкции user.followers.count(), если вне класса обявлена только таблица и её колонки? Что-то вообще всё не явно.

Всё. Нашел случайно )) Реализовано в миксин-классе UserMixin:


class UserMixin(object):
    ...
    def __eq__(self, other):
        ...
    ...

Может кто подскажет, как в Python увидеть, в каком родительском классе реализуется конкретный метод? Не просто класс который реализует метод, так как метод теоретически может реализовываться в каждом из них, а тот, который действует на конечный результат?


Например, в этом примере ясно, что переопределяется в UserMixin, а если бы метод _eq_ реализовывался где нибудь в недрах API flask-sqlalchimy или в самой sqlalchimy, как это найти, есть ли какие инструменты?

И еще такой вопрос, а как получается, что таблица (или переменная) followers объявленная вне класса, над классом User доступна из объекта класса?


Пример:


файл /app/models.py:


...

followers = db.Table('followers',
    db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
    db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
)

class User(UserMixin, db.Model):

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
...

Затем это как-то доступно в шаблоне — user.followers.count():


...
<p>
    {{ user.followers.count() }} followers, {{ user.followed.count() }} following.
</p>
...

Привет!


Что-то не пойму, как это работает:


if user == current_user:

Эти объекты разные, если смотреть функцией id(), получается сравнение идет по атрибутам класса. Где это реализовано, в каком классе?

Просьба исправить ошибки в тексте:

Метод new avatar()
заменить на:
Новый метод avatar()

Мм… Теперь ваша мысль мне стала понятней, большое спасибо за дополнение.

Но разве это не должно быть стимулом узнавать что-то новое и делать что-то лучше/качественнее?

Если авторов и их клиентов всё устраивает, то по факту качество работ устраивает стороны. Они находятся на одном уровне развития. То есть, лучшее качество или максимальное развитие уже между их отношениями существует прямо здесь и сейчас до тех пор, пока кто-то из сторон не сделает иной вывод, что мы "на дне". Но если не сделать такой вывод, то стимул к росту не появляется, и он не нужен, так как — итак всё хорошо. )))


Нет такого понимания, во всяком случае у меня, что такое истинное делать что-то лучше/качественнее. Это переменная величина, которая меняется относительно наблюдателя, так как через время задаются новые требования, новые планки между участниками процессов, будь это в спорте или науке. Причем это происходит как на низшем уровне развития, так и на высшем, где ставятся мировые рекорды.


Качество — это только личный уровень развития. Кто-то вообще не понимает эти ваши интернеты, айфоны всякие. Искренне не понимают и не могут их оценить. То есть, ваше недоумение, о том, что это не дотягивает до каких-то высот их вообще не это волнует.


Также, это справедливо относительно личностного роста, заботе о здоровье, других сфер бытия. Тут нет планки — вот оно счастье, вот она та самая высота! Нету её. Планка меняется. Достигнув порога развития наступает разочарование которое способствует дальнейшему шагу по лестнице выше. Сегодня это качество, завтра это уже не устраивает кого-то. И не все могут подтянуться на одну какую-то планку качества. Это невозможно, чтобы первоклассник сразу познал азы линейной алгебры )) На мой взгляд существует множество планок качества одновременно в пространстве, поэтому когда нибудь, те ребята из приведенной ссылки выше осознают и подтянутся выше, но принудительно за уши вытащить всех на некий уровень на мой взгляд не получится )) Будет много крови ))

Замечательный комментарий, но… почему "пока еще можно"? Это утверждение относительно мира или все же конкретной личности существующей во времени? Разве знания приходят от людей? Если не от них, то как они могут знать (пока еще можно), что задумал Всевышний?

Можно сделать вывод, что развитие это относительная штука, а не определенное кем-то и где-то состояние в глобальном масштабе. Для сайта приведенного в примере, есть личный рост, развитие, и «глобальный» прогресс их как бы особо не тревожит. И это нормально. В мире полно разного качества товаров и услуг, как вы представляете должно быть иначе? У всех один уровень развития? То, что вы хотите «заплакать» когда смотрите, то скорее всего понимаете, как сделать лучше, но это только Ваш и только Ваш уровень развития. Найдется тот, кто укажет на ваше видение как «ужас-ужас». Всё относительно. И это на мой взгляд очень хорошо, так как в этом случае, у каждого начинающего есть шанс подняться до любого уровня, начиная с самых низов, в отличии скажем, если бы был некий потолок вхождения, от которого вообще бы трава не росла.
Чем хорош бакенд? тем что все развивается согласно каким-то логичным и понятным принципам.

Не всегда это конечно верно. "Тучи" пайтон библиотек, например, в асинхронщине для веба уже говорят об сложности контролирования процессов. Один из последних докладов moscowPython по asyncio об этом говорит, что стало много всего, что страшно всё это эксплуатировать в продакшене, нереально понимать, что происходит на самом деле.

Понял так, как Вы сформулировали — "Он о том, что в мире фронтенда опыт больше ничего не значит".


Ну я не верю в молодость, я чуть младше Вас и наблюдаю за собой, что не угнаться за молодежью и нельзя остаться на том же уровне, чем занимался n лет назад. Это не только касается ИТ, возьмите тех же актеров, как они умирают невостребованными.


Если положить руку на сердце, то фронтэндом тут только не ограничишься. Какова значимость опыта в Delphi, Visual Basic, windows XP, что там еще было? Да поглядите на архитектуру ЦПУ, ядра ОС (linux), библиотеки и тд. Опыт 10 летней давности сегодня превратился в тыкву. Всегда надо бежать "на острие атаки", а это в 40 нереально в силу объективности, силы к нам не приходят, но явно уходят.


А как можно "центровать" фронтенд? Это же не один язык, но и разметки, фрэймворки, движки всякие. Как эти сущности можно слить в одну экосистему типа Net core (я только догадываюсь, что это)? Это изобрести принципиально новый вэб?

Ну это обычная "боль" старичков. Если признаться честно самому себе, то мы (люди) не хотим терять того, что достигли, а когда теряем — вот тут и начинается нытьё )) а теряют все и это будет всегда, таково условие жизни. Человек описал свою боль, что 15 лет назад он был "на коне", а щас у руин своих знаний и опыта )) это неизбежно для каждого из нас. Для молодых, амбициозных людей, уверен, описанные сложности вовсе так не кажутся. С вашим комментарием согласен.

Информация

В рейтинге
Не участвует
Откуда
Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность