从4月
9日
至14日,DjangoCon Europe 2019 Conference在哥本哈根举行。 充满希望和抱负的我参加了这次活动,并陷入了动荡。 在本文中,我将尝试传达我对会议的印象,并评论对Django态度的如此急剧变化。
免责声明:本文包含不宽容,绝对判断和不合理批评。
大家好,我是Maxim,我住在奥地利的蒂罗尔州。 我是GeekBrains的老师,还是winePad项目的共同所有人,是酒精饮料技术数据的收集者和销售者。 这通常是关于葡萄酒的数据。
关于winePad项目我们拥有欧洲最准确的数据库。 这是因为数据库中的所有葡萄酒均由我们的专家亲自验证。 简要介绍一下我们的工作:重击。 有时情况有时很恶劣:一天一天40次认可时,第二天早上我并不总是确定自己是怎么回家的。 好吧,或者我不记得汽车停在哪里。
该项目始于2012年,服务器端为Django 1.4 / Python 2.7,客户端+ JsonRPC服务器端为Jquery。 现在,技术的集合已经增加。 无论如何,我们确实遇到了Django。
我于2015年加入该项目,接替了蒂罗尔开发商的接力棒。 从劣质的头发到处都是。
提洛尔牧羊人的故事,迅速地重新晋升为程序员,我将抛之脑后。 如果您看到他们的解决方案,我敢肯定您会突然想杀死所有自称为“ Tyrolean程序员”的人。到2019年2月,情况变得很明显:使用当前的技术无法开发该项目。 为了寻找答案,我决定去准时在哥本哈根举行的DjangoCon 2019。 我想从会议中得到什么:
- 向专业人士学习,了解我在工作中可以改进的地方。
- 投入我平台的新解决方案领域。
- 与像我一样的Django书呆子一起出去玩。 可以说参加派对。
- 了解Django有什么问题。 自2016年以来,经常会想到我缺少了一些东西。 我只是不明白什么。
这是怎么回事:

零日
在会议开始之前的星期二下午,举行了Django Girls会议-这是DjangoFoundation倡议,目的是促进Django进入女性群众。 从下午5点开始注册。 3英寸软盘充当徽章,任何人都可以将他们想要的所有内容写到软盘上(哈哈),并带有USB驱动器。
在会议的所有日子里,都有来自当地一家小型啤酒厂的数量不限量的精酿啤酒,标有“粉红色的Django-pony”。 一方面很酷,另一方面……马马虎虎的啤酒。 大厅装饰着各种大小的粉红色飞马。

不拘一格的象征意义和对牧民社区的参与感产生了一种特殊而愉悦的回味。 我遇到了长期的Django开发人员
Russell Keith-Magee 。 所有参加这次会议的人都取决于其软件解决方案。

在购买机票时,我必须同意遵守
会议的有关开放,宽容,建设性批评和尊重参与者性取向的规定。 通过同意这一点,我不怀疑这可能导致...
在这里,我首先了解了吃豆子的规则:如果另一个人接近对话圈,则对话的参与者必须走到一边,并为新的对话者腾出空间。 通常,可以大吃大吃(任何数量)薯条,结识即将到来的专家,参加任何对话并吸引组织者。
主观性和缺乏宽容许多参与者穿着不整洁的衣服,破鞋子,闻起来很奇怪,并且看上去在游泳。 在接下来的几天中,这一愿景并未发生太大变化。 我看到这很奇怪。
傍晚,我在哥本哈根漫步。

彼得回忆说,这是一个位于冷海沿岸的漂亮小镇。 他们过度使用自行车,但您可以原谅鱼餐厅的一切。 很好吃
在会议的前三天,报告在大厅内交付了500人(有377位与会者)。
同时,在不同的大厅里有工作室 。 大多数报告都记录在视频中,您可以在
YouTube上
观看 。 没有研讨会的广播。 报告和研讨会的列表和描述在
这里 。 正如其他与会者指出的那样,所有研讨会都毫无例外地准备得很差。
在休息时间,提供了许多食物和咖啡。 在这方面,会议作了充分的准备。 赞助商的展台(主要是人力资源)毫不客气地站在大厅。 我有兴趣和斯堪的纳维亚的猎头聊天。
第一天
关于DjangoProject的情况公开讲座
简要地说:比谁能帮助。

工作坊GraphQL
JSON的懒惰。 如果每个人都开始使用不同的查询符号,生活将不会更好。
生活更幸福
Django REST Wrapper,开始编写4行代码,而不是6行。
关于在不停止服务器的情况下移至新版本代码的研讨会
用100个型号的代码进行为期10个月的
心脏手术的故事。 该项目创建了三次:
- 与旧型号。
- 使用新旧型号以及在线切换的可能性。
- 没有旧型号和开关。
长而昂贵。
由于这次研讨会,我错过了三场讲座,其中两场演讲得不错,我将在笔记中查找:
- 750,000拉请求请求。
- Django网络安全标头。
与下一个咖啡罐休息后,进行了一次有关
DJANGO-ORM的讲座。 演讲者-西格德·吕达尔(Sigurd Ljodal)。 这是当前ORM的开发人员,可以在Django存储库上查看他的活动。

该报告很有用,但令我不高兴。 一方面,新的ORM-Django已经非常成熟。 另一方面,Sigurd在其示例中使用了
queryset.query
的未记录功能。 在随后与Sigurd的对话中,令我惊讶的是,他像大多数Django开发人员一样,并不真正知道
queryset.query
方法。
“为什么在示例中使用它们!” 我问。 “好吧……那样……”西格德回答。在所有报告之后,进行了闪电般的谈话。 自发想讲话的人的五分钟报告。 “闪电”通常很有趣,但是五分钟是不够的。 演讲者的目的是引起兴趣,然后人们可以提出要求。
闪电谈话后,几辆啤酒卡车和漫长的对话……第一天结束了。
第二天
研讨会:Bootstrap Django
无法解决。
图像识别,使用Django进行机器学习
无需培训,使用外部资源,识别中的门槛,示例中的有趣图片。 只是有趣。
图像识别研讨会
一切正常,发现其中有十幅。 但是工作的速度使一切都划掉了。 准备20秒,搜索30-40秒。 我想:在我们的项目中一次性搜索图片将花费数年。 每天我们有成千上万的此类请求。 建议的解决方案不适合我。
视觉变更测试
前端工作人员可能会有所帮助。
SQL炼金术与Django-ORM
DjangoStars的演讲者Gleb。 我同意这个想法,但是我仍然会通过DJANGO-ORM方法实现某些东西。 我看到的最主要的事情是可以在我的项目中应用炼金术。

研讨会:通过Django食物管道的完整请求/响应路径
刷新知识很有用。 请记住,是Django开发人员:您要做的只是配置WSGI应用程序。
然后我有了关于“闪电”的想法。 我做了一个演讲,并跳过了一些报告。
神圣项目文件报告
来自RedHat文档团队的负责人。

之后,我跳起来感谢演讲者。 她清楚地解释了为什么我应该退出并开始记录我的项目。 感激之际,我摸了摸她的前臂。 什么从这里开始! 这是一只极地狐狸。 我以为他们会让我入狱。 对于与会议中其他参与者有关的不当行为,一切都会受到口头惩罚。
用ZAP遍历
该应用程序将尝试使用它已知的所有方法来破解指定站点。

我立即想尝试破解我的项目。
闪电比第一天有用。
Alexander(DjangoStars)讨论了存储选项设置

模型领域的包装故事
Vrapper监视值的返回类型。
报告安装存根,而不显示私有客户端数据
在开发,测试和记录阶段有用。 在通用数据保护法时代,值得考虑。
@sensitive_variables
,作者没有回答为什么他重新发明了
@sensitive_variables
装饰器。 看来他只是没有阅读文档。
报告单个线程范围内的变量使用情况
我已经使用此解决方案很长时间了。 我只能说Django中全局变量的使用是由于缺乏技能和缺乏架构知识。
会议的两天后,我很沮丧:三天之内的一些有用的报告。 关于Django的知识很少,关于多余和不必要的解决方案的知识非常多。 WTF ??? 甚至哥本哈根也没有让我放心。

运河里的水很干净。 可以看到在底部。 你在那里也看到什么吗? 辉煌的第三天
这一天消除了所有苦难,消除了疑虑,带来了更多的悲伤。 我的建议是研究有关第三天报告的所有内容。 这样的知识注入很少被发现。
维多利亚时代的谋杀报告
女孩用手指告诉了保护用户数据法律的原因。 我理解这种法律出现的根本原因。 数据保护问题以及电气绝缘问题可能会意外杀死某人。
在示例中使用GeoDjango
摘自GeoDjango文档的作者。 美人

我已经在项目中计划了。 现在我知道如何实现这一点。
Elastic Group Architect关于公司软件产品
这包括elasticsearch。

我喜欢如何在Django管理面板中嵌入用户活动图的示例。
创建自己的模型字段的完整周期

我喜欢它:我有几个领域,但是在创建它们的过程中我错过了很多东西。
Django插件系统
该插件可以即时打开和关闭,并通过...信号检查是否包含。 太奇特的解决方案无法使用。 一旦骑上调味酱,“看看还能怎么做”。
然后,我发表了有关Elasticsearch的演讲,并去了研讨会。 然后我错过了两个报告,浪费了时间。
但是事后发生的事情可以用颜色重复多次。 每次对听到的声音的本质有了更深入的了解。
重新设计您的Django项目
迟早,开发人员会遇到一个建议:胖模型,瘦视图,愚蠢的模板(愚蠢的模板,瘦的视图,厚实的模型)。

我
ObjectManager
自行
ObjectManager
:仅在
ObjectManager
方法和由
ObjectManager
生成的
QuerySet
方法中选择对象。
很少有人留下这种代码重新分配。 该报告包含最大程度消除依赖关系和完全抽象业务逻辑的示例。

这对于遵循规范的代码分隔风格的追随者是一个坚实的教训。 抵抗变化。 决策的独立性...所有这些都应归于优质产品。 报告末尾提供了有助于实现这一目标的文献。

超级有帮助。
然后是演讲和DjangoCon官方部分的闭幕。
然后有一份报告回答了我所有的问题并证实了我的感受。
Django重新设计大纲
演讲者-汤姆·克里斯蒂(Tom Christie),
Django REST框架的创建者。 Tom在幻灯片中告诉并在代码示例中显示了Django(以及后来的DRF)为什么不再具有开发机会的原因。 是的,您可以修复错误,是的,您可以添加闪烁或改进ORM。 Django的一般形式仍然保持不变。

当汤姆(Tom)说:“我根本认为不可能用Python构建一个高负载的快速系统时,”人们对此保持沉默。

然后,汤姆展示了有关如何解决Django项目中的异步问题以及随之而来的问题的代码示例。

对于异步ORM,提到了Ariadne和未完成的异步DB驱动程序。 用于Jinja模板和重做模板代码。

该报告明确概述了要创建一个适用于Django的现代技术的框架,您需要重写Django中的所有内容。 并且最好用另一种语言。 显然,Django处于开发的死胡同,美观,舒适且已过了十年。
我非常感谢汤姆,他没有离开我,并向他展示了发展的选择如果您还没有准备好丢下这匹老马,那么可以选择如何进一步削减Django。 图书馆,如何整合,如何测试。 Starlet,SQLAlchemy,Jinja模板等,请参阅幻灯片以获取更多详细信息。
为想要下床的人选择下一步该做什么。 没有“就像在Django中一样”的解决方案。 对现有类似物,速度,复杂性和前景进行了审查。 我已经尝试过上述GO,我几乎喜欢它。
关于闪电,我冒险打电话给进一步削减Django的电话。 仅在汤姆·克里斯蒂(Tom Christie)演讲后,电话听起来才完全令人信服。

接下来的两天包括
冲刺 。 那些与Django保持合作的人:他们打开了错误消息并进行了更正。

成功完成编辑后,您可以运行并在整个大厅中敲锣。 繁荣的频率是每5-7分钟一次。
有趣的是,冲刺发生了什么我查看了批准的其中一项编辑:修复了将数字转换为字符串的错误。 (
#30363-不要对小数点使用指数表示法 )文件
django / utils / numberformat.py我感到非常难过:
- 该编辑包含返回类型错误。
- 在代码中添加了两个不必要的递归。
- 作者似乎不了解
Decimal
工作原理。 - 测试不会检查所有边界情况和返回的数据类型。
我重新编写了代码,然后批准了之前的编辑,并说:您在这里出错了! 他选择了错误的策略:当有人谈论他们的错误,尤其是关于经过检查和批准的错误时,程序员并不真正喜欢它。
显示错误报告会更好。 当然,他们回答我说应该是这样。 python中没有人参与类型检查,通常,python是一种没有严格类型的语言。 因此,男孩,您去了森林,有很多事情没有您。 我没想到对代码编辑有这样的文盲态度,并且对指出错误没有免疫力。
从这里开始,又出现了一个问题,为什么它是Django:经常人们纠正那些不了解算法或思想的错误。 这就是为什么出现新错误的原因,例如
QuerySet.as_manager
类的曲线方法,请求中具有
base_sort=True
(无法检查,可以解决)的不可
GROUP_BY
或不合逻辑的解决方案,例如
AdminModelForm
拼板和内联。
除了冲刺外,还有一些研讨会,我喜欢关于ZAP的重播。 我们设法对站点进行了骚扰,并发现了安全漏洞。
我以为离开家了。 我想在Django中看到新功能...但是我在其他地方找到了它们。 我想传达的是,有一个快速而正确的解决方案...但是失败了(我会告知您该错误)。 我想进入专业领域...但是我想像出了点问题。 知识带来悲伤。 最主要的是我知道下一步要去哪里。

PS:我的项目的决定是在winePad停留在Django上时做出的。
PPS我愿意讨论会议和Django。 询问是否不清楚。
PPPS从2019年6月20日起在GeekBrains上,我的Django课程从Python开发
部开始 ,我一定会提到我在会议上学到的要点。