52个项目第1周:一个项目跟踪应用

几周前,当我写我的第一篇博客文章,承诺每周完成一个项目时,我知道这将是一个艰巨的目标。 我不认为我的第一个项目会花这么多工作。

我已经进行了足够长的编程时间,以了解应用程序构建的构建基块和一般概念。 当我在第1周开始我的项目时,这是一个用于跟踪我的项目构想和完成状态的应用程序,我认为这将是我几个小时即可完成的直接构建。 我很快发现我错了。 尽管花费了几个小时的工作时间,并且在此过程中有些头痛,但我很自豪地说我已经为项目跟踪应用程序成功构建并部署了最低限度的可行产品。 随时在此处跳到实时应用程序。 在应用程序中,您可以查看我使用了哪些工具的详细信息,以及对我有真正帮助的一些资源。

我将Flask用于框架,将MongoDB用于数据库,将MongoEngine用于ODM,并将Heroku用于托管。 在下文中,我概述了一些我称之为的“学习经历”。 尽管他们引起了一些麻烦,但他们也教会了我一些重要的编程课程。

了解复杂的概念:循环进口

我花了至少三个小时来处理循环进口问题。 我以前听说过循环导入,但是在有限的编程时间内从未遇到过此问题。 我发现此资源对于理解循环导入以及如何避免循环导入非常有帮助。

我的特定问题是数据库变量的实例化。 在实例化数据库之前,我尝试在__init__.py文件中注册模型。 解决方案是在实例化“ app”变量后立即实例化数据库变量。 一旦我了解了问题,这是一个快速解决方案,但仍然引起了头痛。

最小化重构:应用程序文件结构

这个问题是我过去无数次遇到的问题。 对于像我一样自学并经过python教程的任何人,您可能已经看到Flask应用程序有许多不同的文件结构。 我了解到,这不是“最佳方法”,而是“特定项目的最佳方法”。 我最初从单个app.py文件运行所有内容。 随着我的前进,文件变得更加混乱。 然后,我使用views.py,models.py和__init__.py文件重构了代码。 在我遇到循环进口问题之前,这非常有效。 我再次重构为使用Flask蓝图。 在我准备部署应用程序之前,这种重构一直有效。 除了在开发服务器上的本地计算机上运行我的应用程序外,我遇到其他问题。 我花了一两个小时的时间在google-foo上进行调试,直到最终到达最终的文件结构,并使用run.py文件启动应用程序。 我很高兴我能够使用它,并且现在我比起初更了解文件结构和导入。 但是,我已经确定这是我需要更多实践的地方。 我意识到没有在整个构建过程中多次重构代码,而是意识到我需要在开始之前对文件结构进行更多的思考。

文档:Heroku Procfile

这种学习经验与上述有关应用程序结构的经验有关。 使用Heroku时,有一个Procfile,可运行必要的命令来运行您的应用程序。 这是一个简单的文件,但是以前没有使用Heroku的经验会带来另一种学习体验。 当我的应用程序完成时,我很高兴能够部署它。 我运行命令并导航到我的应用程序URL。 我很沮丧地发现一个错误。 一个星期后,我已经看到我将要学习热爱阅读文档。 我的问题的答案就在Heroku开发人员文档中就在我眼前。 我只需要阅读它即可。

我不会假装文档不干,但是我对这个问题的经验告诉我,无论是枯燥还是刺激性的,阅读和理解文档都是我真正想要实现成为一名更好的程序员的目标所必需的。

第一周完成。 我是一个更好的程序员吗? 答案是肯定的,但是我只是朝着正确的方向稍稍移动了一点。 我还有很多东西要学。 例如测试。 我读过的所有内容都宣告了为您的应用程序编写测试的重要性。 我过去曾经写过测试,但是我知道我还有很多要学习的知识。 为Project Tracker应用程序编写测试将是第二周的项目。最好在该应用程序仍然非常简单的同时立即编写一些测试,而不要等到我添加其他功能。

如果您已经做到了,谢谢! 让我知道您对我的第1周项目的想法,一些学习经验或您想评论的其他内容。 以下是我的Project Tracker应用程序的github存储库和托管URL。 我还添加了一些我过去一周就获得的资源。

直到下周,

将

GitHub存储库:https://github.com/pb3975/project-tracker

托管应用:http://pb-projects-prod.herokuapp.com/

资源:

https://realpython.com/blog/python/flask-by-example-part-1-project-setup/

https://github.com/rozza/flask-tumblelog

http://stackabuse.com/python-circular-imports/