你见过的最糟糕的Django练习

gru*_*czy 23 python django

你注意到使用Django框架的最大错误是什么?您是否看到过一些真正的误用,可能应该作为对Django文档的警告?

oza*_*zan 27

视图中的逻辑过多.

我曾经写过难以适应40行的观点.现在我考虑超过2-3个缩进级别,10个左右的LOC或一些内联注释,以便代码味道.

诱惑是编写最小模型,找出您的网址路由,然后在视图中执行其他操作.实际上,您应该使用模型方法,管理器,模板标签,上下文处理器,基于类的视图和抽象基本视图......保持视图代码简单易读的任何东西.保存表单的逻辑应该在Form.save()中.在多个视图的开头或结尾重复的逻辑应该放在装饰器中.重用的显示逻辑应该包含included模板,模板标签和过滤器.

长视图很难阅读,理解和调试.学习如何使用工具包中的其他工具,您将为自己和团队节省很多痛苦.


Ale*_*nor 12

不要将内容分成多个应用程序.它不是关于可重用性,而是关于拥有十几个模型,并且在一个应用程序中有超过100个视图,它是不可读的.另外,我希望能够轻松扫描我的urls.py文件以查看URL指向的位置,当我有100个更难的URL时.

  • 你把项目特定的地方绑定在不同的应用程序代码上? (2认同)

Rob*_*ner 11

我试图将项目附加到我的会话而不将其复制出来,附加项目,然后将列表添加回会话.

这个错误出现在NewbieMistakes页面上,所以希望我能够很好地合作.

这是正确的方法,以防万一有人好奇.

sessionlist = request.session['my_list']
sessionlist.append(new_object)
request.session['my_list'] = sessionlist
Run Code Online (Sandbox Code Playgroud)


Wil*_*rdy 9

我认为最大的问题是人们尝试编写好像是Java/C的代码:他们试图创建过于通用的应用程序,这些应用程序在未来需求发生变化时永远不需要更改(这对Java/C来说是必要的,因为这些应用程序并非如此易于更改/重新设计).结果是一个非常复杂的应用程序,它不灵活且无法维护.

在Django中没有必要:只需编写今天的需求,使用已定义的特定任务构建可重用的应用程序,并在需要时进行更改.我越来越多地发现自己试图尽可能简单地编写内容,不惜一切代价避免过于复杂的设计.


S.L*_*ott 5

  1. 使用预保存和后保存事件进行修改.

    如果你不能简单地进行save,你应该重新考虑你想要做的事情.毕竟,它只是一个关系数据库.如果您正在做的事情太复杂,那么您将遇到ORM映射问题.

  2. 尝试编写超级通用 - 一个视图就是一切 - 功能.视图函数是函数的原因.他们可以使用模块,包,对象,其他功能等.它们可以很短且类似,而不会产生代码味道.

    如果你需要使用10行代码来构造uber-generic-do-it-all对象,它将是一个没有uber-generic-do-it-all对象的12行视图函数,那么uber-对象没有帮助.

  3. 在ORM模型类上强加了太多超级复杂的对象类设计.如果它需要抽象基类或元类,则在ORM层中表现不佳.

  4. 未能利用tests.py和测试客户端创建完整的单元测试,无论它声称应用程序是什么.

  • 我不得不反对3.抽象基类在ORM层中表现很好,并且是一个重要的工具.在机构环境中尤其如此,在项目环境中,无论是在项目内还是在项目中,模型的属性都存在很大的重叠.保持一个小型的mixin库真的有帮助. (5认同)

小智 5

最糟糕的facepalm时刻......返回一个无限的查询,恰好是几十万行.它是在一个很少使用的代码中,因此不经常发生,但是当它发生时它会导致服务器崩溃.

始终确保您的查询结果有限,即:

results = MyModel.query.all()[:100]
Run Code Online (Sandbox Code Playgroud)

不:

results = MyModel.query.all()
Run Code Online (Sandbox Code Playgroud)

或使用迭代器:

for result in MyModel.query.iterator():
Run Code Online (Sandbox Code Playgroud)


Ste*_*lim 5

不使用raw_id字段作为10000+对象的密钥,然后想知道为什么访问Admin会使服务器瘫痪