Спасибо за статью.
1) А почему решили пробрасывать ссылки на проект в каждой зависимой модели, а не сделать общий механизм подключаемых прав через generic fk (да, я знаю что медленней)?
2)
Отдельное приложение нужно для того, чтобы иметь хорошо определенную последовательность инсталлированных приложений. Мы разместим приложение authorize в конце списка INSTALLED_APPS в файле settings.py, чтобы к моменту регистрации прав все модели точно были известны системе.
Другими словами, если вы использовали github.com/duo-labs/webauthn в общедоступном web-приложении, теперь ваше web-приложение должно быть с открытым исходным кодом.
поясните, пожалуйста, почему все веб-приложение, а не модификации непосредственно библиотеки webauthn?
В итоге вы могли получить несколько миллионов объектов в памяти, только для того, чтобы узнать, что найден более, чем 1 объект.
вот же.
возвращает .get() один объект, но ему еще надо рейзить ошибку, когда из базы более 1 объекта прилетело, что свидетельствует об ошибке в логике программы.
еще раз — если у вас .get() возвращает более 2х элементов, то это ошибка в коде.
то что лимит в джанге добавили — это хорошо. но между 2 и 25 разницы особой нет, а вот миллионы да, могут стрельнуть
метод get действительно должен возвращать один объект, но это не значит что в sql должен быть limit 1. То, что можно получить несколько записей подстраховывает от ошибок, когда метод get выбирает по неуникальному кортежу. Если вы не хотите гарантировать эту уникальность, то берите .first()/.last(). Вы не будете получать ошибок в случае неправильно сформированных параметров запроса.
Так или иначе, нам по-прежнему нужен язык низкого уровня, причём построенный именно для популярных фоннеймановских компьютеров. И пускай C устарел, но, видимо, любому его преемнику всё равно придётся отталкиваться от тех же самых принципов.
С последним выводом в статье не согласен. Сделали Rust, который не наследует архаику C и дает все возможности низкоуровневого программирования, но имеет современные возможности
Когда они пришли за коммунистами, я молчал — я не был коммунистом. Когда они пришли за социал-демократами, я молчал — я не был социал-демократом. Когда они пришли за профсоюзными активистами, я молчал — я не был членом профсоюза. Когда они пришли за мной — уже некому было заступиться за меня.
./manage.py inspectdb
Introspects the database tables in the database and outputs a Django model module (a models.py file) to standard output. You may choose what tables to inspect by passing their names as arguments.
Use this if you have a legacy database with which you’d like to use Django. The script will inspect the database and create a model for each table within it.
1) А почему решили пробрасывать ссылки на проект в каждой зависимой модели, а не сделать общий механизм подключаемых прав через generic fk (да, я знаю что медленней)?
2)
Для этого есть ready hook docs.djangoproject.com/en/3.0/ref/applications/#django.apps.AppConfig.ready
или (330 * 10E15).
А то нестыковочка на 6 порядков по производительности (~порядка 30 последних лет развития суперкомпьютеров)
поясните, пожалуйста, почему все веб-приложение, а не модификации непосредственно библиотеки webauthn?
вот же.
возвращает .get() один объект, но ему еще надо рейзить ошибку, когда из базы более 1 объекта прилетело, что свидетельствует об ошибке в логике программы.
то что лимит в джанге добавили — это хорошо. но между 2 и 25 разницы особой нет, а вот миллионы да, могут стрельнуть
С последним выводом в статье не согласен. Сделали Rust, который не наследует архаику C и дает все возможности низкоуровневого программирования, но имеет современные возможности
Introspects the database tables in the database and outputs a Django model module (a models.py file) to standard output. You may choose what tables to inspect by passing their names as arguments.
Use this if you have a legacy database with which you’d like to use Django. The script will inspect the database and create a model for each table within it.