当前位置: 首页 > 后端技术 > Python

LearningDjango-BeginnerMistakesIMadeandHowIAvoided

时间:2023-03-26 17:55:04 Python

这篇文章来自reddit用户unknownguy0518,讲述了他在学习Django时犯的初学者错误,以及他的一些建议。更多具体内容,请前往相应专题查看。我是Django网络框架的新手。我也不是专业程序员。我没有任何人的帮助,我所学到的一切都是通过反复试验得出的。我犯了无数错误,现在回头看,我微笑。在艰难地学习了很多基础知识之后,我设法创建了一个简单的网站来添加/更新/删除联系人。它部署在Heroku(免费服务器)中。我在这里写的纯粹是我个人的意见。如果您是初学者并且热衷于探索Django的世界,您应该阅读这篇文章。它可能会帮助你。那些想浏览我的网站的人(仍然需要一些工作),它是:https://djangophonebook.herok...以下是我在创建自己的网站时面临的主要挑战:官方文档和教程有很多AnyonewithDjango经验或其他编码经验会告诉您阅读官方文档以了解有关这个很棒的Web框架的更多信息。事实上,并不是每个人都喜欢如此高水平的技术细节。乍一看,任何详细说明此类框架内部工作原理的文档都会吓到新手。毫无疑问,Django文档非常详细且组织良好,但我建议您观看一些优秀的视频教程,让我们了解所有可用的功能以及如何在实际项目中实现它们。我亲自浏览了YouTube上“CoreySchafer”的Django教程。这是我在Internet上找到的最好的教程之一。还有很多其他人,但我总是回到他的视频。我还发现YouTube上“CodingEntrepreneurs”的“尝试Django”系列也是一个很好的教程。一旦你有了方向感,官方文档就会更有意义。Django版本现在有许多Django1.x版本的教程。虽然我们的项目希望使用相同的版本,但我强烈建议您使用最新的稳定版Django。它不仅消除了重写代码,而且还允许我们使用旧版本可能没有的新功能。当我第一次开始使用Git和GitHub处理项目时,我忽略了使用Git维护版本控制。有一天,我在清理电脑中的一些旧文件夹时,不小心将整个项目文件夹删除了。那时我才意识到使用Git来跟踪我在项目中所做的更改的重要性。对于像我这样的新手来说,花了一段时间才弄清楚如何使用它(有时我还在纠结),但它为我省去了很多麻烦。我还使用GitHub将所有代码转储为一个开源项目。您应该考虑使用Git。如果您搞砸了并想恢复到项目的旧版本,它将对您有很大帮助。相信我,重写代码真的很令人沮丧。使用.gitignore文件如果您使用的是Git,请确保您也使用了gitignore文件。添加您不希望Git跟踪的任何文件或文件夹。有一个GitHub链接(https://github.com/github/git...),我参考了Python.gitignore文件并将该文件中的所有内容复制粘贴到我的gitignore文件中。虽然有些细节不一定特定于Django,但我将保留所有内容。它涵盖了我的用例的所有内容。我强烈建议您以此为起点。之后,您可以根据需要修改该文件。提高您的前端技能是的,您将需要它。您至少需要了解HTML的基础知识才能在Django中创建模板。了解一点CSS和JavaScript会更好。它可以帮助进一步自定义您网站的外观。说到前端,我完全是菜鸟。我只知道足够的HTML来创建准系统模板和很少的CSS,甚至可以考虑自定义我的网站。对于像我这样的人来说幸运的是,Bootstrap为我们提供了现成的小部件,我可以在我的网站上使用它们。它简化了我的许多前端需求。我的项目完全基于HTML和Bootstrap构建。使用虚拟环境为项目创建单独的虚拟环境是一种很好的做法。当您准备部署项目时,这也会派上用场。我通过艰难的方式了解到它的重要性。现在,我会先创建一个虚拟环境,安装所有必需的包,然后再处理我的项目。将单独的settings.py文件用于开发和生产我还没有看到太多教程解释为什么将单独的settings.py文件用于开发和生产是个好主意。单独的文件可以减少混乱并提高代码测试的效率。在处理大型项目时请记住这一点。虽然我从来没有实现过它,但很多专家都推荐它。创建自定义用户模型大多数教程使用内置用户模型来存储和处理与用户相关的数据。如果您想使用电子邮件ID或手机号码作为登录ID怎么办?如果您想在注册时从用户那里收集一些关于您自己的字段怎么办,例如城市、州、性别等?您可以通过创建自己的自定义用户模型来做到这一点。此时您应该考虑迭代AbstractUser和AbstractBaseUser类。为此,我通常会参考两个网站-https://simpleisbetterthancomplex.com/和https://wsvincent.com/。YouTube上的CodingEntrepreneurs(https://www.youtube.com/watch?v=HshbjK1vDtY)还介绍了在他们的一个视频中创建自定义用户模型。我强烈建议观看它以了解它是如何工作的,而不仅仅是复制粘贴代码。使用社交登录今天的大多数网站都提供使用多种社交登录之一登录或注册的选项(例如,使用Google登录、使用Facebook登录等)。根据我的个人经验,大多数浏览我网站的用户都使用我提供的社交登录选项,而不是标准的注册流程。在将其付诸实践之前在您的项目中实施它很有意义。一个很好的开始是“Django-Allauth”库,我用它来实现Google登录。设计模型在部署项目之前,考虑一下要存储在数据库中的数据类型始终是个好主意。哪些字段应该是必需的,哪些字段可以是可选的,用户注册时要捕获哪些信息,所有这些都必须事先仔细考虑。一旦网站上线,由于我犯的这个错误,对模型进行任何更改都将被证明是一件非常昂贵的事情。基于函数的视图(FBV)与基于类的视图(CBV)对于像我们这样的初学者来说总是有点困惑。根据我的经验,我发现通用的基于类的视图非常容易编写,使用的代码行数少得多,而且看起来更简洁。这是我们真正可以看到所有魔法发生的地方,因为Django在后端为我们完成了所有繁重的工作。但是,我还发现使用CBV实现任何自定义逻辑对用户来说不是很友好。我在互联网上也找不到太多关于如何使用和覆盖现有CBV方法的信息。这就是基于函数的视图蓬勃发展的地方。它们需要编写更多的代码行,解释起来可能更复杂,但是当我们必须实现任何自定义逻辑时它们会很强大。了解CBV和FBV的工作原理确实很有帮助。但对于大多数用例,CBV可以轻松完成工作。这是我创建视图时的首选路径。路由和URL除了设计模型,在创建项目时规划所有路由也很有意义。清楚地了解各种URL也可以简化编写相应视图的过程。确保URL在应用程序之间保持一致并为CRUD操作做好准备非常重要。它还使编写RESTAPI条目时的事情变得更容易。在生产中处理静态和媒体文件很少有教程可以告诉您在尝试部署项目时将面临的一些挑战。我正在尝试在Heroku上部署我的应用程序。当您设置DEBUG=False时,默认情况下Django不支持提供静态和媒体文件。对于静态文件,WhiteNoise库可以帮我完成这项工作。它的文档也很简单。Heroku不存储媒体文件。我们必须使用其他服务,例如Amazon的S3,并使用所有必需的参数相应地更新settings.py文件。S3也可用于提供静态文件,但主要缺点是它不是免费的。因此,我的网站目前无法加载用户选择的任何个人资料图片。我还没有找到替代方案。预先计划您将如何传送媒体文件,同时考虑到所涉及的成本。处理不同用户的权限这是需要考虑的重要一点。我面临的挑战之一是弄清楚如何授予或限制不同用户对特定URL的访问权限。例如,根据某些条件,用户A可能对某个URL具有只读访问权限,而用户B可能对同一URL具有写访问权限。您不希望一个用户访问另一个用户的个人资料并更新它。这就是您需要确保对正在访问的URL授予适当权限的地方。CoreySchafer的教程对此有很好的介绍。创建自定义中间件没有很多教程涉及这个主题。我还没有弄清楚如何创建自己的中间件。当我有更多信息时,我将更新此部分。提高网站的安全性我还没有看到太多教程解释pythonmanage.pycheck--deploy以及为什么在网站上线之前确保我们拥有必要的安全性很重要。在启动您的网站之前,您应该探索一些事情。必须认真对待网站的安全和用户数据的安全。保护您的管理界面我喜欢Django的原因之一是它内置了许多安全功能。其中之一是功能齐全的管理界面。一旦用户访问管理页面,他/她实际上可能会滥用数据。创建超级用户时,请确保不要使用诸如admin或manager之类的通用名称作为登录ID。另外,请确保使用难以猜到的非常强的密码。此外,将管理页面的路径更改为完全不同且难以确定的路径。避免使用默认的admin/路径。我还遇到了一个名为django-admin-honeypot的第三方库,它通过创建类似管理员的页面来欺骗未经授权的用户,但除此之外什么也没做。此外,它还会在可在实际管理界面中访问的表中捕获这些用户的详细信息,例如他们的IP地址和其他参数。然后您可以决定是否要阻止他们访问您的网站或采取必要的措施。保护秘密密钥和其他关键数据使您的项目开源的挑战之一是保护您不希望世界其他地方看到的秘密密钥和其他个人价值,例如电子邮件ID和密码。我遵循了CoreySchafer在他的YouTube视频中提供的建议,并将所有这些重要值保存为环境变量。万一您有意或无意地发现了您的密钥,则必须立即更改它。您可以使用python自带的secrets模块(需要Python3.6+)来生成强密钥。同样,CoreySchafer的教程涵盖了这一部分。制作响应式网站很少有教程专注于使网站桌面和移动友好。当我最初创建网站时,它在PC上显示良好,但当我尝试在移动设备上访问它时,我意识到我必须重做一些模板。在创建模板时立即考虑到这一点可以为您以后节省大量工作。我主要将Bootstrap用于前端,它专注于创建移动优先项目。编写测试每个应用程序创建一个tests.py文件。我仍然不知道如何编写测试。我观察到GitHub上的许多可用于Python或Django的包或库确实有很多测试。此外,很少有教程解释如何编写测试。这是我仍在努力弄清楚的事情。当我有更多信息时,我将更新此部分。使用RESTAPI虽然RESTAPI本身并不是一个单独的主题,但像我们这样的初学者应该知道为什么规划它很重要,如何创建API以及如何将它与Angular或React等其他前端集成。以我的经验,在设计视图的同时编写RESTAPI确实可以使事情变得更有效率,并为您省去尝试弄清楚权限等的麻烦。“DjangoRestFramework”是RESTAPI的首选库。我通常创建一个名为“api”的单独应用程序,并在那里编写我所有其他应用程序的序列化程序和视图。它把一切都集中在一个地方。即使我的项目有API入口,我仍然必须创建一些API。在部署之前设置DEBUG=False并在部署期间保留DEBUG=True是一个常见的错误,我也犯了这个错误。在启用该站点之前,不要忘记在settings.py文件中将DEBUG值设置为False。当URL抛出错误时,您不希望最终用户看到所有异常和其他编码相关信息。CoreySchafer在他的教程中很好地解释了如何做到这一点。部署项目对于像我这样的初学者来说是另一个真正的麻烦。我应该在哪里部署我的项目(Heroku、PythonAnywhere、DigitalOcean、AWS等)?我应该做什么准备?我在生产中使用哪个数据库?开始部署需要哪些文件(例如requirements.txt、procfile等)?我应该购买免费服务器还是付费服务器?有很多事情需要考虑。我浏览了CoreySchafer的YouTube视频,最终将其部署在免费的Heroku服务器上。GitHubrepo:qiwihui/blog关注我:@qiwihui站点:QIWIHUI