“和我聊Python”是一个美国的聊天播客,英文名Talk Python To Me,类似于喜马拉雅的音频课程节目,只不过这个主题是编程语言Python。该节目从2015年的节目到现在,已经超过256期多了,几乎每期都邀请行业专家过来座谈,涉及编程、模块、背后故事等方方面面,为Python的传播做出了非常大的贡献。
也许是语言障碍的原因,这个播客在国内基本上很少有资料介绍,更加没有文本的翻译,所以本人在这里试图做一个意译翻译,供各位爱好者了解Python社区正在发生和讨论的事情,或者Python语言的趋势动态等。因为是意译,并非一对一的直译,部分广告直接过滤,专业术语保留不翻译,也保留了时间戳,万一你想看原文,也可以找得到。
当出现【】时,里面的John,也就是译者,开始“嗡嗡嗡”了,知道背景可以忽略。
官方的介绍如下:
和我聊Python是Michael Kennedy主持的每周播客。 该节目涵盖了各种Python主题以及许多相关主题(例如MongoDB,AngularJS,DevOps)。节目的形式是与行业专家进行45分钟左右时长的*对话。
下面是第224期:从网络设计的100天中学到的12个教训(12-lessons-from-100-days-of-web)
原文在此:https://talkpython.fm/episodes/show/224/12-lessons-from-100-days-of-web
0:00 Michael Kennedy: 早在2018年5月,鲍勃·贝德博斯(Bob Belderbos),朱利安·塞奎拉(Julian Sequira)和我就开始了一个为期9个月的项目:为Python Web开发人员创建专门的100天的编程课程。虽然之前有类似的经验,但是由于涉及到许多不同的主题,因此许多内容对我们来说也都是新的。在这一集中,我们联手将在此过程中发现的有趣的课程,技巧和工具汇总为一系列不错的技巧和技术的快速列表。我们希望你能找到新的有用的东西。
这是2019年7月29日录制的Talk Python To Me,第224期。
欢迎收听“和我聊Python”(Talk Python To Me),这是有关Python,语言,库,生态系统和行业大咖的每周播客。这是你的主持人,迈克尔·肯尼迪(Michael Kennedy)。在Twitter上关注我,我的推特账号是@mkennedy。节目网站是talkpython.fm,可以收听之前的节目,并欢迎通过@talkpython在Twitter上关注节目。
【John:上面是每期节目必读的Slogan。主持人本身也是很厉害的开发人员】
本期节目由Ting和Linode带给你。请查看他们在细分市场中提供的产品,这确实有助于支持此节目。
【John:上面是该期节目的赞助商】
鲍勃,朱利安(Bob,Julian),欢迎回到“和我聊Python”。
1:16 Panelists(指两位嘉宾,后同): 谢谢。 很高兴来到这里,迈克尔,很高兴来到这里。
1:18 Michael Kennedy(主持人,后同): 是的,很高兴你们俩都来这里。 我们之前就通过节目相识,我不记得那是哪一集。 很久以前,当我们谈论这个“ Python编程100天”项目时,你们已经在探索了,一路走来,整个过程不容易,对吗?
1:36 Panelists: 哦,是的,马不停蹄地忙碌着。 我认为是第140期。
1:40 Michael Kennedy: 是的,那是140期,谢谢。
1:42 Panelists: 挺过100天,是很不容易的。
1:46 Michael Kennedy: 是的,那时候,你们已经完成了编程100天,并将其记录并写博客,然后,你来参加该节目是为了谈论它,就像现在这样,很棒。没有太多东西专门教人写Python,所以我和你们一起编写了我们去年发布的100天编程课程,很有趣,人们似乎都喜欢它。 所以我们用Python编写了100天的Web课程,这也是一段很长的旅程,并且最近发布了它。因此,本次节目的讨论将基于我们从这些经验中学到的东西,我想明确一点,我不希望这像该课程的商业广告一样。我希望我们真的只是专注于技术,但是当我们创建这些课程时,其中有些只是文档性的工作,但是很多是研究和完善想法,更好地理解事物,对吗?
2:45 Panelists: 哦,毫无疑问,我必须要开发的技术和技能的数量真的是太多了。 我所涉及的主题太多,大部分我只了解一点点,所以不足以实际构建有用的东西。 在大部分时间里,大约80%的时间,实际上是在学习并尝试弄清楚概念与方法。
3:07 Michael Kennedy: 哦,是吗,鲍勃?
3:08 Panelists: 这其中有非常大的主题,比如JavaScript和Django,我们不得不将其分为4天来讲述,这本身就很具有挑战性。
3:17 Michael Kennedy: 是的,同样具有挑战的是,尤其是Web编程,不知道什么时候已经有了这个感觉,Web编程其实很简单。如果要使用Python编写Web应用程序,则必须做出一些选择,例如我要使用Django,还是要使用Flask?也许我会像Michael一样使用Pyramid。对了,我挺喜欢Pyramid框架的。现在,你只要看一下,新的框架和即将发布的框架,几乎每个月都有一个新的Web框架。这太疯狂了,所以,你知道,我们不了解所有这些就不足为奇了,因为很难一一跟进所有这些框架。就是说,如果我要学会,它实际上会需要两个月左右,对吗?因此,你们是否感觉到Web编程已经崩溃了?然后,你知道,那只是Python框架。除此之外,我们还有JavaScript,数据库,以及很多类似的东西。
4:13 Panelists: 没错。实际上,我最近在工作中尝试创建Web应用程序时遇到了该问题,但是我使用Flask还是打算使用Django? 然后,等等,我需要在那里进行哪种互动? 我需要学习哪种JavaScript? 哦,等等,我需要JQuery吗? 你知道,还有很多其他东西。 我将如何部署它? 它将是一个静态网站吗? 是的,这很荒谬,但也相当有趣。
4:41 Michael Kennedy: 没错,这里有很多乐趣,所以当我们学习本课程时,我们都学到了很多东西,基本上,它由大约24个为期四天的小项目组成,每个项目通常都是 一种独立的技术,通常是独立的。 我说过,我不希望这是本课程的广告,所以我要真正指出,这就是全部,我们将要讨论的每一点都在GitHub存储库中,并且 每个部分都有自己的自述文件,因此,如果你愿意玩,则GitHub存储库是开放和免费的,我们将像在GitHub存储库中讨论这些主题中的每个主题一样,放在这期节目的笔记中。 因此,鲍勃(Bob),考虑到这一点,你是否想从课程中遇到的第一个话题开始,让Python Web开发人员感兴趣?
5:29 Panelists: 是的,当然,我马上就开始使用API和API Star。 它与Django REST是同一位作者,因此我选择了该框架,因为它相对较新,并且了解该作者,我希望它具有合理的默认值,事实确实有。 是的,这是一个有趣的小项目,可非常轻松地构建你的API。 我很快的得到了结果。 他们还需要一些测试数据,我使用了Mockaroo,这是一个服务,或者说网站,可以很容易地获取虚假数据,并且将两者结合起来,这是一个有趣的项目,我认为我在其中使用了一些汽车 数据并围绕它构建了一个API。 但是,我在部署应用程序时遇到的挑战之一是存在一些重大更改,这一点需要注意。 即当你使用一流的开源现成产品时,它们可能会更改,并且可能会快速更改。 因此,我认为最后我们必须将版本固定在需求中,以确保其它人学习时不会遇到这些问题。
6:37 Michael Kennedy: 绝对,API Star真的很棒。它是由汤姆·克里斯蒂(Tom Christie)写的,实际上,即使从我们编写该课程以来,它也已经发生了很大变化,这就是它的发展速度。这就是我的提示,不专门针对API Star,有很多这样的项目。所以,我们需要对其中的所有项目进行调查,但是想弄清楚哪些项目会变得受欢迎和充满活力比较具有挑战性,因为它们潮起潮落,但是呢,这又十分有趣。我喜欢这种运作方式。你向我介绍的其中一件非常有趣的事是对伪造数据的赞美,因为作为课程开发人员和培训师,你知道拥有伪造的数据非常棒,因为你不需要真实数据。当然拥有现实的数据最好,但你知道,在获得数据之前,你通常必须先构建应用程序,而构建的应用程序将要收集数据,这是一个矛盾。因此,为了构建UI和API以及所有这些东西,拥有逼真的数据真的很好,所以能否告诉我哪里可以得到这些数据。
7:46 Panelists: 好的,在mockaroo.com,那里目前有143种数据类型。它在地理位置,商业,先进性,个人性以及对等方面都有所细分。 我选择汽车是因为这很相关。这个话题很容易引起共鸣。 在这种情况下,我选择了汽车制造商,型号,型号年份和VIN号,是的,你只需将它们丢到字段名称中,然后就可以将其下载为CSV,JSON,CSV,SQL,Cassandra,Firebase ,Excel,XML等所有有用的数据格式,它会生成一个文件,然后,可以将其加载并开始使用它。 这个真的很酷。
8:28 Michael Kennedy: 哦,你已经列出了一些数据类型,其中之一就是汽车VIN,车辆识别号,一串长字符串,但实际上它会生成看上去合理有效的VIN号,不仅是那里的随机值,而且实际上你会期望...
8:42 Panelists: 对的,要像真实的数据.
8:42 Michael Kennedy: 就字符数而言,是的,确实如此,并且它具有真实的定位功能,所以,从中提取的所有数据源都非常有趣。
8:52 Panelists: 是的,的确如此,如果我查看API类,那么从字面上可以将其转换为数据,因此我有一个包含ID,制造商,车型年份和VIN的汽车类,因此相对容易地在API之上构建API。
9:04 Michael Kennedy: 是的,这很酷,因此,如果你需要编程,并且需要用于API或Web应用程序或Mockaroo的数据,那就太酷了。
9:12 Panelists: 我在本节中还要强调的一件事是Postman。 它是一个用于测试API的GUI,这是另一件事。 我以前使用过它,预想经过那么久这个Postman变得越来越好,因为我准备再次使用它,用它来从GUI测试你的API以及GET和POST请求非常方便。
9:34 Michael Kennedy: 是的,你可以使用自己的开发工具来做到这一点,但是在Postman中,它是如此的好。 它使你可以将标题设置得恰到好处,它使你可以执行所有HTTP动词,包括POST,DELETE和类似操作。 对于和我聊Python这个网站,我必须维护一整套API,因为大多数API都在课程中,而且我在Postman中拥有一整部分已保存的开发和生产资料,用于进行测试和制作,确保一切正常,是的,我也推荐Postman。 好吧,朱利安,你想谈谈下一个吗?
10:10 Panelists: 好吧,所以我对此感到非常兴奋。 这是Netlify。 听起来有点像Netflix,但它是Netlify。 这是一个静态的站点生成部署网站。 就像什么行业都精通一样。 我绝对喜欢它,而有趣的是,正如我们之前谈到的那样,我对此一无所知。 我甚至不知道它在本课程之前就已经存在,因为我们正在计划该课程,迈克尔,你向我展示了这一点。 你说:“嘿,如果你要在静态网站上进行操作,看一下这个。”
10:37 Michael Kennedy: 是的,最初,你的目标是仅覆盖静态站点,并且喜欢使用Pelican或类似的东西?
10:42 Panelists: 是的, Pelican.
10:42 Michael Kennedy: 是的,没错,我想,如果你正在做Pelican,则必须查看Netlify,因为更加有趣。
10:47 Panelists: 我当时想,这是什么?迈克尔向我指的是什么?当我去看一下并实际运行时,这真是太棒了,所以给所有正在听节目的人,这是一个很棒的工具,你可以像往常一样在GitHub上编写静态站点,或诸如此类,然后使用Pelican或Jekyll或Hugo或其他任何想要使用的东西将其内置于其中,然后将Netlify指向你的GitHub存储库,因此其中有一个连接到你的存储库的小钩子,它仅监视你的Github库。它是这种持续交付或连续部署类型的工具,一旦它检测到你的GitHub存储库中有更改,它就会为你构建你的网站并为你在线部署它,因此完全无需动手。你不必做任何事情,那可能是课程中最令人满意的部分之一,当我演示或录制时。我曾在那一刻的担心,希望它正常工作,请正常工作!然后它开始工作,因此,在我进行录制时,我生成了该网站,将GitHub代码推送到GitHub,然后它实际上在一分钟内创建了该网站,是的,它确实存在于网络中。他们为你提供了一个免费的URL,虽然网址有些乱,但这就是你的URL,当然,你可以购买自己的域名并添加所有内容,这一切都是额外的话题,但是从免费的角度来看,你可以运行使用Netlify在网络上创建你的静态网站,这真的很酷,我非常喜欢。
12:25 Michael Kennedy: 是的,似乎只个好方法。 对我来说,感觉就像Heroku对Python应用程序的感觉一样,就像你可以git push heroku一样,它可以追踪你的应用程序并弄清楚如何运行它。 就像Netlify一样,它是用于纯静态站点的。
12:42 Panelists: 是的,完全正确,所以我认为对我来说最令人惊讶的事情是浏览他们网站上的文档,然后觉得文档应该是如何的完整。它实际上很吸引我,因为我们将Pelican用于PyBytes,这也是我们选择PyBytes所制作的静态站点的框架。 所以我很熟悉它,但是一旦我阅读了他们的文档并开始阅读它,我想尝试Jekyll,Bob提到了这一点。 他在他的博客上使用了它,然后我听说了关于Hugo的好消息,你可以查看这个庞大的清单,因此,如果有人在听这个节目,并且有一个静态网站,那么我完全会挑战你尝试一下,因为这是最令人满意的事情之一。
13:26 Michael Kennedy: 是的,这太酷了,我简直不敢相信它们免费提供的,对吗? 我的意思是,为了清楚起见,我们与Netlify没有任何隶属关系。 他们没有为此付我们任何钱。 就像,这么酷的东西却免费,我无法相信它实际上是可用的,例如,自定义域,HTTPS证书,通过GitHub进行持续部署,所有这些都是免费的,这很疯狂。
13:47 Panelists: 是的,超棒的工具。
13:47 Michael Kennedy: 太棒了是的,所以,如果你有任何静态的东西,那肯定是这样做的方式,这很酷。好吧,所以我想我接下来是这里的下一个。我想重点关注的事情之一就是基本的HTML,因为我想听听你对此的两种看法,因为对我来说,我很长一段时间都不想涉足Web开发,因为我知道自己是一个好的开发人员,但是我不觉得我的审美很棒。就像我以前一样,在读书时期不擅长艺术。所以我觉得我将很难设计一些东西,像HTML和CSS以及所有类似的东西,直到我花时间坐下来正确学习它,才发现实际上并不是一个很大的障碍,但是,我总是会尝试找到一种方法,无需真正编写HTML,该怎么做?像是什么小部件会生成我想要工作的东西,例如日历,因为我不想写,你知道我的意思吗?就像我已经很久这样了,但是,一旦我很好地学习了HTML和CSS,就变成了一件我很乐意做的事情,我觉得这很容易完成,并且消除了所有犹豫,所以我认为太好了。所以我想谈谈HTML的历史,并且有一些让我感到惊讶的东西,我想我会在这里进行介绍。因此,在第5天到第8天的GitHub存储库中,有一段我们去重新创建yahoo.com和google.com,这就像回到了1996年一样。
15:16 Panelists: 牛X。
15:16 Michael Kennedy: 是很牛X,但是,天哪,你们可以想象那些网站过去的样子吗?
15:23 Panelists: 是的,很垃圾,不想看。
15:24 Michael Kennedy: 太奇怪了,我回头看看1996年的网站,我想,哇,创建一个网络启动公司真的很容易,因为像Google和Yahoo一样,我们在15分钟内重新创建了这些网站,你知道吗? 就像,哇! 真的,十五分钟,好。 现在Google是一个非常有趣的技术基础,但是Yahoo就像目录列表一样,你可以在一个小时内完成它。 我的意思是,这确实很有趣,但是仅此而已,所以我发现有些有趣的事情是,早在1996年,你就无法使用电子表格了(Spreadsheets)。对,电子表格(Spreadsheets),而不是样式表(style sheets)。 因为样式表直到1999年才开始使用。
16:05 Panelists: 哇塞,我都不知道。
16:06 Michael Kennedy: 所有HTML属性都必须在DOM中设置,一遍又一遍。是的,正像你要发行时事通讯一样,因为它们不允许使用样式表。所以这太疯狂了,然后另一件事是,当我们回顾HTML的历史时,例如从1990到2000年之间有许多飞速增长,每两年或每年都有很多版本这样的事情。在1999年是HTML 4.0。 XHTML是在2000年推出的,它试图使所有HTML文档都像XML的超集一样成为正式的XML,因此每个元素都必须关闭,每个属性都必须有一个带有引号的值,对吗?那时就是2000年。HTML的后一个更改是14年后的,因此HTML十四年来一直没有改变,尽管这基本上是在2002年互联网泡沫和其他一切之后。就像那里发生了什么,对不对?因此在2014年,HTML 5.0出现了。现在,我知道可能会有一些微小的变化,但实际上,在规范标准中,2000年至2014年之间没有发生重大变化。
17:16 Panelists: 这实际上有点偏离主题,但是我对此感兴趣的是,你进行了所有研究,发现了所有这些东西,然后我开始通过你来学习它,所以这就是全部很酷的东西。那时,我还在上学,我仍然很英俊潇洒,哈哈。
17:36 Michael Kennedy: 好吧,你可能是那些创办初创公司并退出中学的孩子之一。 开玩笑。
17:43 Panelists: 应该是~
17:45 Michael Kennedy: 可能是,应该是,原本是,啊哈?你在做什么?明年我要去上大学。 是的,我要带我的游艇去游览,因为我的生意做得很好。
17:54 Panelists: 将来,我要将这些灌输给我的孩子们,哈哈哈
【John:下面是广告时间】
18:00 Michael Kennedy: Ting为你带来了Talk Python To Me的这一部分。让我告诉你有关Ting的情况,Ting是在美国可用的一项新移动服务,其目标是开发人员和其他精通技术的人。首先,他们的平均客户每月只支付23美元,但他们不是折扣提供商。他们的服务通过T-Mobile和Sprint的快速,全国性网络运行。如果像大多数人一样,由于你通常都在wifi上而使用的数据量不大,那么Ting会为你节省大量现金,但请不要担心。你仍然可以按自己的意愿使用任意数量的数据,每GB仅需$ 10。我一直使用的一项移动功能是网络共享,而使用Ting,你可以以相同的数据速率不受限制地进行网络共享。如果你通常通过iMessage或WhatsApp聊天,则电话线每月6美元,演唱会10美元,文本每月3美元。考虑一下,没有合同,账单清晰明了。访问python.ting.com,即python点T-I-N-G点com,并查看其节省计算器。输入你的使用情况,并确切了解你要支付的费用。使用该链接,你还将获得25美元的试用额度。那就是python.ting.com,或者只是单击显示笔记中的链接。好吧,鲍勃,下一个话题。
19:05 Panelists: 我强烈推荐一些很好的东西,实际上,我很高兴为你介绍了它,因为HTML对于Web开发人员是如此重要,当我查看Django工作流程时,真的在模板中编写HTML,非常重要。 同样,CSS,即使你使用的是框架,也总是需要设置样式。 因此,这是Web开发人员应具备的非常基本的知识。 我真正惊讶的另一件事是我们获得了多少成就。 前几天,我需要一个进度条,突然发现,可以非常简单拥有这个预定义的标签。不需要JavaScript,没有脚本,你可以只使用一个progress标签并给它一个数值,就可以了。
19:48 Michael Kennedy: 太好了,是的,我们确实走了很长一段路,成长良多。 但是在JavaScript不常用,我也同意CSS实际上很容易实现,如果你可以学习CSS的基础知识,就像是Web超级强大,对吗? 这确实让我们学到了很多东西。 不过,另一部分时间是使用JavaScript,对吗?
20:06 Panelists: 是的,不,我们无法摆脱它,实际上,你最好学习JavaScript,这是一个很好的东西,因为大多数Web都是由JavaScript驱动的。 我的意思是,有Python,做后端,但是前端里的每个页面都使用JavaScript,有些还使用得非常多,所以我面临的挑战是JavaScript是一门完整的语言,我需要在其中4天内介绍完,这很困难,所以我真的想成为一名本质主义者,并专注于本质部分。数据类型和一些ES6实际上也是如此,知道这一点很重要。
20:42 Michael Kennedy: 是的,那基本上就是JavaScript的第六个版本,ECMAScript 6。
20:46 Panelists: 是的,我们有arrow函数和destructuring,映射和过滤器(map and filter),因此很可能你会找到它,所以我确实介绍了一些ES6,并且在这种情况下,我想谈谈React,这是其中的一个 JavaScript中的主要框架。 再说一遍,那是一座非常陡峭的山。 我决定实际尝试制作一个游戏,就是一个hangman游戏,因为当你处理变量,类和函数时,游戏非常好,并且你必须保持游戏状态以及使用用户界面,因此我决定构建 一个游戏,这个不容易实现,但是,它给了我一种将巨大的话题分解为16个左右的细分的方法。
21:28 Michael Kennedy: 这很酷。 你有Python背景,对React的看法是什么? 比如,你喜欢吗? 一般的编程模型是什么样的?
21:39 Panelists: 起初有点让人困惑,但是后来我确实开始欣赏它的设计理念,尤其是它如何处理可变性。 因此,我确实喜欢上了它,但是花了一点时间。 React很多令人感动的地方。
21:56 Michael Kennedy: 是的,作为一名Web开发人员,对我来说有点奇怪,因为我一直试图将关注点分离,例如,你已经有了样式表,有了JavaScript,然后,已经有了你的HTML,并且我一直致力于使HTML尽可能少地依赖其他两个,依此类推等等。就像尝试保持聚焦,在这里,就像你将HTML嵌入到JavaScript中一样,只有很少的组件,对我来说似乎有点花俏。
22:24 Panelists: 是的,JSX,对吗?新的语法,开始确实感觉很奇怪。
22:30 Michael Kennedy: 是的,我想,如果工具支持,该工具将那个小的HTML块视为HTML,那还不算太糟,但这肯定是一个思想上的转变,是吗?
22:37 Panelists: 并且有一些工具可以引导你的应用程序。 例如,我使用了create-react-app,我认为它来自Facebook,Facebook发明了整个框架,并且确实有作用,因为你已经有了所有的默认设置,并且可以npm start并拥有一个基本的结构。 所以真的有用。
22:56 Michael Kennedy: 是的,这很酷,是的,许多此类前端框架(JavaScript框架)都为它们提供了一些自举式的CLI。 这很酷。
23:05 Panelists: 因此,正因为我是一个使用JavaScript的新手,所以我现在正在尝试学习它,所以,从教学的角度来看,这是一个有趣的观点,你不得不将JavaScript压缩为四天,只是,似乎不可想象。对于那些不知道的人,你必须真正降低门槛,从头开始教授它,因此,我可以从零开始自己学习吗?是的,你可以。我假设有一些基本的编程知识。你确实需要知道什么是变量,但是它从数据类型和基本构造循环等开始就非常基础,而且你知道,如果你已经知道Python或另一种语言,那么我想很多事情听起来很熟悉,JavaScript中的列表或数组也可以切片,也可以获取索引。只是语法是.slice,因此它们的概念非常相似,但语法有时有所不同。好的,很酷。
24:09 Michael Kennedy: 是的,很酷,朱利安,你大部分时间在Flask上,所以你会讲一个为Flask做的插件Flask-Login,对吗?
24:16 Panelists: 是的,所以这对我来说更像是一个存储清单项目。 很久以来,我一直想着如何使用Flask登录网站,而我要告诉你,迈克,我想在结束时把头发撕掉。 我花了整整一个月的时间来解决这个问题。 对于不熟悉Flask-Login的任何人,实际的Flask-Login部分都是简单的部分。 在此之前,你需要学习的所有内容只是SQLAlchemy,以建立自己的数据库,建立自己的模型以供用户登录,而且我之前从未处理过任何东西,因此这是主要的学习点之一。在这整个100天的挑战中,对我来说很重要。 但这是最令人满足的事情。 当你查看我的页面时,就像你说的那样,迈克,那是1996年的HTML。我认为我的页面看上去比那还要糟糕。但实际上,如果查看已注销和已登录的视图,还不赖,我想那天晚上我喝了几杯啤酒来庆祝。
25:22 Michael Kennedy: 很好。
25:22 Panelists: 是的,这是最令人满意的事情之一,因为一旦你绕开它,它实际上就非常简单。在你进入Flask-Login之前,你必须学习很多SQLAlchemy或我必须学习,并且我教过这一点,这对我来说是最难的部分,就像我刚才说的那样,但是如果你可以解决这个问题,知道这些知识,那么实际的Flask-Login相当简单。我认为其中最重要的部分之一就是与Flask一样,装饰器中有很多东西,还有一个令人惊叹的小装饰器,你可以在要在其上运行的网页上使用任何功能网站,我认为这只是登录,它是login_required,login_required。你可以将其放到任何页面,任何route上,如果有人尝试浏览该页面,它将检查是否已登录,就这么简单。为了使登录页面正常工作,你必须对网站进行其他任何操作。那可能是使用Flask-Login的最令人满意的部分,所以这是一个非常好的过程,如果你还没有尝试,请给自己几个小时,然后试一下,因为它实际上很简单使用,然后实现注销页面以创建用户,以便人们可以实际注册一个帐户,然后将所有内容与SQLAlchemy数据库后端绑定在一起,然后事情就变得很美好了。
26:51 Michael Kennedy: 是的,这很酷,听起来很不错,而且这些Flask插件肯定很棒。 另外,如果你仍在使用Flask,那么也很有可能同时使用SQLAlchemy,Flask是一个微框架,并且不包含某些ORM,因此,只要你使用的是关系数据库 ,使用SQLAlchemy的机会非常高。 你可能会使用其他东西,例如Peewee ORM,这很不错。 你可能正在使用MongoDB中的MongoEngine之类的东西,但是你很可能知道SQLAlchemy,因为你已经在这个领域了
27:26 Panelists: 好吧,困难的部分也很重要,如果你是Flask的新手,那么从该单页面Flask应用程序到运行具有目录结构和视图的完全成熟的Flask应用程序,并拥有一个数据库, 你必须进行一次巨大的跨越,因此,将SQLAlchemy放下,这是第一部分,然后使用你的插件。
27:48 Michael Kennedy: 是的,绝对的。我觉得我不确定该使用哪种正确的方式,但是我觉得Flask是如此简单,就选用了。 就像我创建一个文件一样,我创建app.py,我可以调用Flask来创建应用程序,我用它来装饰一个函数,hello world, app.run,那就OK。但实际上,还有其他所有事情,比如数据库访问,结构,元素分解和测试一样,创建这些东西时,它需要的不仅仅是基础的功能。
28:14 Panelists: 所以基本上是错觉。
28:16 Michael Kennedy: 是的,这就是为什么我不确定我该怎么说,因为它没有,像Flask所说的那样,以积极,正确的态度提出它。比如,这只是一个文件,如果你真正创建的应用程序只是一个文件,就像整个网站一样,可能是你做错了。它的卖点有点像鼓励你不要做最好的事情,所以无论如何,我仍然喜欢它是一个很好的框架。好吧,我想这就是我的下一个话题,所以我想谈的下一个话题也是Flask,这个话题叫做Quart,所以这汇集了一些我在Python中真正有趣的想法。很多时候你都听到人们告诉你,例如,Python中的异步编程非常复杂,并且基本上已经崩溃了,并且,由于GIL和类似的东西,你无论如何都无法真正使用它,并且我对此进行了很多思考,并对此进行了大量研究,实际上,我认为从Python 3.5开始,不再是那样。我认为Python中的异步编程真的很有趣,因此我将在稍后讨论,但是,诸如Flask,Django和Pyramid之类的东西都不支持异步编程,这很奇怪。你们觉得奇怪吗?
29:28 Panelists: 是的,有一点。
29:32 Michael Kennedy: 当然,比如,Web应用程序基本要做的是它们与其他系统对话并进行协调,然后等到发生这种情况。就像你发出请求一样,它与数据库进行对话,等待,在弄清楚用户是谁之后,数据库可能还有其他问题。它会问,那么,你发给我的这个类别是什么?它等待着,也许它将调用一个API并等待着。也许它将使用缓存,并调用Redis并等待它,然后将这些答案放到模板中并交给你。所有关于协调和等待的事情都一样,基本上就是我看到网络的方式。但是,这是异步编程的理想方案,例如,让你在等待数据库时做其他事情,因为你实际上没有做任何工作,而是在等待。但是由于这些框架构建方式的悠久历史,它们都基于WSGI。 WSGI基本上就像是单线程请求。没有一个很好的方法,因此,如果你确实想这样做,则必须从众多这些全新框架中选择一个,否则你可以选择一个叫做Quart的东西,这很酷,我已经Quart之前已经在和我聊Python上进行了介绍,但是Quart本质上是与Flask兼容的API和插件级别,但是它支持异步方法,异步和等待以及所有类似的东西。所以这很酷,因此你基本上只需将quart一词替换为flask。如果是小写的q,那是小写的quart。如果它是Flask中的大写F,那么它是Quart中的大写Q,差不多就可以了,像Flask-Login之类的东西仍然可以使用,但是它仍允许你编写异步def home或async def login或async,无论你要使用什么视图,都可以进行异步处理,然后在其中进行数据库调用。你可以等待Redis密钥查找以及类似的操作。
31:15 Panelists: 非常好,非常棒!
31:16 Michael Kennedy: 是的,这真的很好。 Flask很有趣,从长远来看Quart将会独立。我知道与David Lord和Quart的维护者进行了一些对话,讨论如果他们是如此相似,他们可能会以某种方式进行合作。就像,我们可以让Flask异步吗?而且Flask的路线图确实没有同步。我知道有人在谈论Django的异步路线图,或者类似话题,所以,这些其他主要框架正在朝着这个方向努力,但它们已经存在。这是一个挑战,但是那里有一堆非常有趣的事情,而在我们讨论这个主题时,我想讨论的另一件事,就是这些在Python中进行异步编程的不同方式,例如我们有线程,有进程,有asyncio,它使用async和await关键字,但由于某些原因,线程不能使用async,你不能等待一个奇怪的线程。有一个叫做“不同步”的东西,“不同步”可以让你,是的,“不同步”可以让你在所有异步方法上放置一个装饰器,它会找出适合它的异步编程或执行类型,所以有时它会使用线程,有时会使用asyncio,有时会实际上创建子进程,但是你的程序模型都是一样的。整个过程都只是异步和等待。这是一个美丽的图书馆,我只是喜欢那个东西,我不认为我们在这里的课程中谈论这些东西,但是绝对值得一看的是,你是否正在做大量的异步操作和等待。所以无论如何,如果你想将Flask转换为Quart进行异步转换,那么在GitHub库中就需要21至24天。
32:52 Panelists: 很棒。
32:52 Michael Kennedy: 是的,很有趣。说到Django和它的异步设计路线图,鲍勃,你有什么意见?
32:57 Panelists: 那仍然是我的最爱,所以很大一部分...
33:06 Michael Kennedy: 是的,负责Django的伙伴们正在讨论,计划中,但是没有完成。
33:10 Panelists: 是的,我是一个*的粉丝,所以我在课程中进行的大量研究和研究都是Django,Django登录注册和Django REST,因此Django是一个非常重要的话题,只不过人们发现自己学习曲线很陡峭。 因此,最好的方法是构建一个非常简单的CRUD应用程序,然后创建,读取,更新,删除,并且我使用一个模型构建了一个报价应用程序,非常简单,但是却是研究Django ORM的绝佳机会。 因此,如果你不熟悉这些框架,那么它们要做的一件事就是摆脱编写原始SQL的麻烦,因此你可以使用Object Relational Mapper或ORM,这使得与数据库和Django的对话非常容易。 我真的很喜欢ORM,它非常直观,语法很直接。
34:11 Michael Kennedy: 是的,和Django的不同之处在于,就像朱利安和我在谈论我们都喜欢的SQLAlchemy,但是SQLAlchemy是独立的,你可以选择将其引入Flask或Pyramid或类似的东西,但是与Django ,它带有自己的,更集成的数据访问层,对吧?
34:26 Panelists: 对,这是一个很好的补充,因为Flask必须单独设置,并且通常使用SQLAlchemy,但是Django包含了所有内容。这是一个完整的解决方案。另外,对于模板,我认为对于Flask,你将使用Jinja,而Django有其自己的模板引擎,因此Django非常有用,如果你想要开箱即用的完整解决方案。但是后来有人喜欢它,有些人不喜欢,我喜欢他们所做的决定。你喜欢Django还是Flask?你怎么看?你我之间永无休止的战斗,是吗?你是Django阵营的,很好。是的,我要讲的另一件事是,我的意思是总是这样,通常,如果你创建一个网站,则需要某种注册和登录,所以我介绍了一个Django注册插件,该插件最近已升级到3.0。很棒的插件,如果你需要捕获电子邮件并进行双向身份验证,那么你需要发送一封电子邮件(确认电子邮件),以供用户确认和注册。唯一令人困惑的是模板丢失了,所以我最终将它们提供为.zip文件。即使这样,我还是真的建议你研究一下名为Django-registration的插件。最后,在这种情况下,还介绍了Django REST。正如我们之前提到的,是与API Star相同的作者,是的,这是另一个很棒的框架,它使构建API变得相对容易,它是在Django模型之上进行的。
36:00 Michael Kennedy: 是的,如果你已经为Web应用程序创建了Django模型,例如,如果你希望将其作为RESTful端点公开,那么这是一种非常自然而然的选择,因为你只需像薄薄的API层那样放置API。
36:12 Panelists: 是的,你基本上要做一个序列化模块,这几乎是你要做的所有事情,因此它非常容易,并且还支持权限,因此我认为这是通过某种中间件完成的,如果需要插入了 一大堆文档,很容易,只需几行代码,所以我真的很喜欢Django REST框架。 我强烈推荐它。
36:39 Michael Kennedy: 很棒,你在你的编程挑战平台使用了Django REST架构吗?
36:43 Panelists: 好问题,么有。
36:45 Michael Kennedy: 只用了Django,没用Django REST?
36:48 Panelists: 是的,Django用起来很简单,只需手动做几个API的接口就行。
36:54 Michael Kennedy: 是的,我也经常那样做。
36:55 Panelists: 我们在想将来使用移动应用或者什么的,我们需要为整个程序设计一个API接口,应该会用到它。
37:05 Michael Kennedy: 是的,我已经这么做了。
37:07 Panelists: 是的,我只想强调的另一个是用于电子邮件的SendGrid,因为使用注册插件,你必须发送一个验证链接,而SendGrid使其API可以很容易地发送电子邮件,因此在这种情况下我也使用了它。
37:25 Michael Kennedy: 是的,你建立自己的SMTP服务器并在本地与之交互的日子早已一去不复返了。 使用诸如SendGrid之类的东西十分正确。
37:32 Panelists: 是的,我想我也曾经尝试过使用Gmail,但实际上它并不能用作API,也许出于安全方面的考虑。
【John:下面是广告时间】
37:46 Michael Kennedy: 你学习的课程。为什么我的电子邮件没有送达? Linode带给你Talk Talk To To Me的这一部分。你是否正在寻找一种快速,简单且价格实惠的托管服务?好吧,看看那家书店,然后在talkpython.fm/linode上查看Linode。那是L-I-N-O-D-E。带有RAM的专用服务器的计划每月仅5美元起。他们在全球拥有10个数据中心,因此无论你身在何处或用户在哪里,都可以为你提供一个数据中心。无论你是要运行Python Web应用程序,托管私有Git服务器还是仅文件服务器,你都将在所有计算机上获得本机SSD,新升级的200 Gb网络,24/7友好支持,甚至在假期也可以,以及7天的退款保证。在基础架构方面需要一点帮助吗?他们甚至提供专业服务,以帮助你进行体系结构,迁移等。你是否希望在接下来的四个月内免费使用专用服务器?只需访问talkpython.fm/linode。
朱利安,下一个得到的教训是什么?
38:44 Panelists: 下一个实际上很简单,但又很令人满意,我在第65到68天的那一天做了一些Heroku部署,这确实很令人满意,所以我知道使用Netlify可以部署静态站点并将其全部托管,但是这次我想获得我的Flask应用程序,而最好的部分之一就是我在整个课程中都创建的Flask应用程序,它全部在本地运行。它全部在你的台式机上本地运行,因此有机会将其发布到网络上,使其在Heroku的dyno上运行,然后将其部署到那里,以便我向所有朋友和家人发送垃圾邮件,然后说:看看我做了什么。”而且它们确实使它变得非常简单,这就是我的想法。除此之外,我们也使用Heroku进行了很多操作,但是它们使它变得太简单了,而最好的部分是使用Flask应用程序,它们可以完全支持Flask,因此你只需部署它即可。你将自己在本地创建的存储库链接到Heroku,然后再次将代码推送到Heroku时,它会进行处理,并且实际上会将你的站点部署到dyno上,并且它是实时的,因此,我认为你唯一需要的是放入代码中的是一个Procfile文件以及到处都是几个小标签,仅此而已,Heroku负责剩余的工作,因此实际上非常简单。这是我在课程的那一部分中介绍的一部分,但我也想强调一下Heroku的一些很酷的功能,我知道这听起来像是Heroku的一个巨大插件,但是不,我只是真的很喜欢他们的工作。他们有很多你可以使用的插件,他们叫做插件。
40:30 Michael Kennedy: 我们也叫他们插件。
40:31 Panelists: 今天我们将其称为插件。所以我想讲两个。鲍勃(Bob)刚刚提到了一个,即SendGrid,因为我们经常使用SendGrid。你可以听到我们在这里讨论的很多东西,我们都在使用,这就是为什么我们想要在本课程中介绍它,但是这个SendGrid插件,它链接了附件,并与你的SendGrid帐户连接。它可以使用最少量的代码,然后可以自动发送电子邮件,而且效果很好,所以我非常喜欢。授课,我认为最困难的部分是让该部分花一天的时间,因为它很容易教。是的,有很多废话。我大概应该唱一首歌或什么。但是接下来我想讲的另一个是Heroku Scheduler,但是你想念这个单词Scheduler,但这本质上只是cron,它使你的生活变得更加轻松。你不需要担心任何后端,它有一个不错的Web界面,如果你像我这样喜欢的话。它非常有用,你可以自动化许多任务。有了这个小的调度程序,你可以随心所欲地在Flask应用程序的一小部分中投入大量的时间,让它每次都运行,只是,它非常容易,使用起来非常愉快,体验非常愉快。不常碰到这么好的事。
41:55 Michael Kennedy: 是的,这是描述部署的好方法,就像通常的部署一样,人们需要学习很多东西,如果你遇到了麻烦,就像,NGINX日志在哪里? 它说这行不通,但是我不知道为什么,我也不知道日志在哪里。 我知道有很多人喜欢像Heroku这样的平台即服务项目,但是如果你想要一堆VM取决于你想要的配置方式,那么这也是一个很好的案例,还有诸如Linode之类的东西,是的。 毫无疑问,如果你倾向于平台即服务,那肯定是个不错的选择。
42:30 Panelists: 当然。
42:30 Michael Kennedy: 好吧,所以我想谈的下一个问题与诸如随时间推移部署和你的应用程序发展有关,那就是数据库迁移。 因此,如果你使用的是SQLAlchemy,Mike Bayer创建了这个模块,并创建了称为Alembic的东西,如果你使用的是Django ORM,那么其中也包含迁移,并且想法是,无论你正在使用哪一个,但是我将谈论SQLAlchemy,只是为了有一些具体的说明。如果你的SQLAlchemy类结构与你的数据库结构看起来不匹配,那么你的应用程序将突然停止运行,对吧?
43:07 Panelists: 是的。
43:07 Michael Kennedy: 你会得到一个500错误,它会说“操作错误:数据库架构”。像这样的列不存在,或类似的可怕的事情,就像,如果你对代码进行了更改,例如添加一个列或其他内容,然后嘣的一声,你的应用程序已离线,就像它不再与数据库对话一样,这是一个问题。那么,你如何管理呢?可能像某些人一样,手动开发数据库。这听起来有点恐怖,因为,你必须编写SQL转换才能正确执行操作,或者像打开工具并对其进行编辑一样,所以Alembic的优点是,你可以将其指向SQLAlchemy模型,将其指向你的数据库。对其进行了一些配置,但是你只需运行命令,自动生成迁移即可。它会查看你的类,并会查看数据库,然后,删除此列,添加此列,并以这种方式更新此索引,然后只允许你运行命令行操作这样会自动转换数据库。因此,一名开发人员进行更改,另一位开发人员将其签出。显然,更改需要伴随迁移进行,因此,他们可以在获取新版本的应用程序时运行迁移。你将其推送到质量检查或分段,然后运行迁移,然后作为部署的一部分,就可以始终使它运行迁移,例如,如果没有任何操作,就可以了,如果你知道它正在升级,迄今为止,一切都没有发生,所以,我们将继续前进。因此,这是确保你的数据库不断与ORM模型保持同步的一种非常好的方法。
44:37 Panelists: 哦,很棒。
44:39 Michael Kennedy: 是的,当我第一次看着他时,哇,看起来很复杂。为什么这么难设置?也许是,有一些小问题引起了问题,例如,如何从Alembic中执行的上下文中正确导入模型?诸如此类的东西,但是一旦你弄清楚了一切,它还算不错。我们在第61到64天介绍了这一点,因此你可以在此处查看小样本代码。另一种选择是不使用关系数据库,例如,在MongoDB上的生产环境中使用我的所有东西,而MongoDB则不存在此问题,但它也有一个基本上是ORM的东西,称为ODM。为他们。我使用的是MongoEngine,基本上就像SQLAlchemy。实际上,它更像是Django ORM,但想法相同。但是MongoDB通常不会出现此问题,因此你实际上并没有迁移。你可以以这种方式回避它,但是很多人都想使用该关系数据库,如果进行迁移,这是解决问题的好方法。
45:32 Panelists: 啊,很棒,如果需要文档,在alembic.sqlalchemy.org。
45:39 Michael Kennedy: 是的,同一个组织,同一批人。鲍勃,你们使用迁移吗?比如使用Django migrations来干你们在干的事情?
45:46 Panelists: 是的,非常简单,进行迁移,即生成文件,然后提交版本控制,然后进行迁移,然后将其同步到数据库。 效果很好。
45:55 Michael Kennedy: 听起来像自动生成的。
46:00 Panelists: Slack bot. 那是我写的最有趣的章节。
46:07 Michael Kennedy: Slack用于各种事物,就像人们用它聊天一样,但是它也有很多集成功能,例如,如果我的网站上有错误,我有一个Slack频道,Rollbar会在我的网站上检测到该错误,然后在Slack上向我发布一条消息,指出网站上有错误,我想这就像一个Slack机器人。 但是,它有各种各样的用途。
46:31 Panelists: 是的,当人们执行请求请求或代码质询回购时,我们会在请求请求通道中收到通知。 另外,如果你考虑使用普通的Slack机器人,它就非常有用,例如你可以设置提醒和设置。 所以,机器人总体上变得越来越流行,所以我认为这是一个很好的技能。 在本章中,我研究了Slack API,我们执行了一个随机的书斜线命令,因此,如果你在我们的Slack中键入/ book,它将涉及我们为运行的另一个应用所拥有的一些书API,并且发回一些随机标题。 你也可以先先先进行/ book和user,然后再为该用户获得最后一本书,这很有趣。
47:15 Michael Kennedy: 很棒。
47:15 Panelists: 这些应用程序的好处是,有很多让人感动的东西,不仅是Slack API,而且你还必须调用另一个API来获取数据,因此在这种情况下,这就是Google Books API,我认为 永远存在。 而且,我们还必须制作一个Flask应用程序,以使slash命令能够实际抓取数据,然后从API检索数据并制作一个API,然后在推出之前,你要在本地服务器上测试互联网,为此,我使用了Ngrok,对吗? 如果你愿意的话,哪个是非常重要的工具,我怎么说呢? 可以说,将你的本地主机链接到你的Internet地址,或者使你的本地主机在Internet上可用,这样你就可以获得这种临时IP,并且连接到该IP的任何人实际上都在与你的本地Web服务器通信。非常有用。
48:10 Michael Kennedy: 我很高兴你在这里提到了Ngrok,因为Ngrok太不可思议了。就像这样,如果我键入Ngrok并给它提供一个端口,它将说,如果我在本地进行Flask到类似88532FF5.ngrok.io的话,我可以像端口5000一样映射,它实际上具有HTTP和HTTPS版本。所以起初我想,“哦,这很有趣。”但是我一直在用它做一些不可思议的事情,例如,当我在开发移动应用程序时,我希望我的手机(在手机上装有调试器)能够与我所使用的Web服务进行通信是在本地构建的,并将PyCharm中的调试器附加到Web服务,当然,我可以放下防火墙,并像其他一样进行设置。但是,当你仅运行Ngrok命令时,无需在任一端更改防火墙设置。它只是自动通过Internet,通过HTTPS,然后又直接通过Internet,你可以单步执行,而另一步也可以。另一个是,我正在与Gumroad进行某种整合,以购买我和马特·哈里森(Matt Harrison)撰写的PyCharm书,我们不得不做一些,有一个选择,你可以在购买课程的地方购买,因此必须,例如,创建一个帐户,然后将其放到课程中,并且该按钮不起作用,因此我输入了该URL,该URL应该被认为有效,但该按钮不起作用。就像,为什么这不起作用?而且,为什么不将Ngrok URL放在其中,而我实际上是逐步进入调试器,Gumroad的回调就进入了我的本地计算机,进入了PyCharm,也进入了我正在创建的API中。 Ngrok的东西真是太酷了。绝对是被低估了。
49:44 Panelists: 真的很酷,如果你无法在localhost上调试某些内容,那么你会迷失方向吧?
49:49 Michael Kennedy: 是的,在这里,你想拥有Slack,在你的示例中,你想让Slack发送一条消息,然后它到达你的HTTP端点以执行某些操作,然后得到响应,例如你无法调试,那是他们在Internet上的基础结构,但是实际上,你可以使用Ngrok像深度运行和迭代这样的本地版本。 这很棒。你也觉得它很有价值,是吗?
50:15 Panelists: 现在很酷。 所以整个Ngrok的事情太神奇了。 我什至不知道你在课程的那部分使用了鲍勃。 除了书籍之外,你还创建了其他Slack机器人吗? 在Slack上,我们实际上使用了一个叫做Karma bot的工具,如果你想让人们为社区做出贡献,互相帮助而赞扬你,则只需使用@handle ++,Karma机器人会保存一个本地数据库 用户的业障,因此用户可以获得额外的积分,而且有趣的是,人们有时会对这种游戏化做出反应。 绝对可以提高社区的参与度,是的,这一切都是由懒惰的机器人运行的。 这很有趣,它是一个机器人,但是人们有时会把它当作人类来对待,这确实是最令人满意的项目之一。 它不在课程中,但是在GitHub上。 我们将链接到它。 这是更详细的Slack API项目的另一个示例。
51:18 Michael Kennedy: 当然。 朱利安(Julian),你想和查克·诺里斯(Chuck Norris)一起结束本节吗?
51:24 Panelists: 哦,是的。因此,尽管我们觉得很有趣,但从实际的角度来看,这是我在课程中获得的最大乐趣。所以我想做的是,我想为你提供快速的背景知识。那是Flask,但我想做的是为用户提供一种现实生活中的用例,因此当你制作Flask应用程序时,尤其是从一开始就学习Flask时,要做的最简单的事情之一就是尝试与外部API对话,因此不要制作Flask API,而只是使用API,提取一些数据,然后将其显示在Flask应用程序网页上。因此,这涉及设置一些GET,获取一些可能会进行POST,然后显示该数据,因此请对其进行处理以将其显示在页面上。都是简单的东西,但是将它们组合在一起是很复杂的。因此,我想在几天内证明这一点,也许有趣的部分是选择了一些有趣的API来玩,而我选择的第一个是Pokemon API。实际上,不,我选择的第一个是Chuck Norris,所以有两个,口袋妖怪和Chuck Norris。而Pokemon真的很棒,因为我要人们做的是在你创建的网页上输入一种颜色,然后将该颜色发射到Pokemon API并返回,你将返回所有具有此特性的Pokemon的列表。颜色,然后该课程向你展示如何在页面上列出数据或将数据打印到页面上,这些内容非常简单,但是却切实可行,并且你会得到即时反馈,嘿,看看我刚才所做的,这很酷!而且,因为你看到了Pokemon API,所以你看到了所有可以拉动的酷小东西,所以我在Twitter上看到了一些人,他们随后对此进行了扩展,例如传播到另一天或两天之后,得到了各种各样的东西。 API的其他信息,真的很酷,但是实际上非常有趣的是Chuck Norris API,所以我不敢相信它的存在首先是费了我一天时间。但是API只是返回了Chuck Norris的笑话,并且直到记录完所有内容并将所有时间投入课程后,我才意识到,那个笑话真是太神奇了。”因此,我认为现在该课程中有一个免责声明,那就是请忽略任何笑话。只是,这对于API来说更多,而对于笑话则不那么重要!
54:05 Michael Kennedy: 真的有意思。
54:06 Panelists: 这个章节确实很有趣。
54:10 Michael Kennedy: 是的,而且使用的API很特别,特别是来自我们有请求和其他类似内容的Python,例如AIOHTTP客户端,它是如此易于访问。 我认为在人们尝试之前,如果没有,听起来好像很困难。
54:23 Panelists: 是的,它实际上很简单,并且可能最好的是,当你处理这类事情时,很多用例都会使用表单,并执行内置的非常简单的Flask表单,然后这也是Flask进入WTForms的一个不错的途径,所以其中有很多好东西。
54:47 Michael Kennedy: 是的,我想用一些JavaScript内容将其包装起来。我并不是真正的JavaScript超级拥护者之一,尽管我在这里和那里经常使用它。很多人在创建Web应用程序时,都认为它必须是JavaScript前端的东西,例如React或Angular或Vue或类似的东西,然后可能有一些API端点。我一直不知道那样的应用程序。它们还可以,但是它们似乎总是像崩溃或出现这些小故障,或者至少像是关于它们的怪异,所以我认为你仍然可以构建主要在服务器端使用的令人惊叹的应用程序,你可以根据需要使用JavaScript,但是如果你出于某种原因想要构建具有离线功能的渐进式Web应用程序,或者出于某种原因而无法浏览的单页应用程序,我研究的选项之一是Vue.js,与Angular相反,Angular的结构很多,需要TypeScript之类的东西。鲍勃,你谈到了React,实际上React很酷。有一些很好的例子。构建大量不同的应用程序就是其中之一,其中之一就是重新创建Mac计算器,它看起来非常非常好。我也将链接到该站点,因此React有一些很酷的示例和选项,但我只是发现Vue.js非常简洁。你只需使用JavaScript创建一个小的Vue.js应用程序。你给它提供值,例如名称,冒号,对不对?什么也不是字符串或任何东西,它执行双向数据绑定。它有很多用于编辑的插件,因此,如果你要构建这些前端应用程序,我绝对建议人们查看Vue.js。只是,它就像一个真正的最小,易于上手的前端框架类型。所以我认为有趣的另一件事是Axios,鲍勃,你和我也谈到了Axios,对吗?就像Vue.js没有与Web服务进行通信的本机方式一样,但是Axios,这是一个JavaScript插件库,我们也将链接至该库。这是一种通过JavaScript与API进行通讯的超级简单方法,只是,我喜欢它,它是如此容易。
56:54 Panelists: 有一个超级有用的库。 我在React一章中也使用了它,以从Python Tips API(我们为课程设置的另一个API)中检索数据。 它使检索数据变得如此容易。如果你使用的是JavaScript和API,则应查看Axios。
57:13 Michael Kennedy: 当然。 然后,我想介绍另外两件事。 有一个称为Quasar框架的东西,它建立在Vue.js之上,并且有一个整体,其中只有一小部分,例如小部件和控件,你可以在Vue.js中仅包含它们,就可以了。 各种很棒的高级UI元素,它们都是预先构建的,可以直接插入Vue,这非常酷。 然后另一件事是称为Vue.py,Vue.py的东西,所以这是一个Python层,因此你可以在浏览器的前端编写Python代码,实际上却是Vue.js绑定。
57:56 Panelists: 喔,很棒。
57:56 Michael Kennedy: 是的,所以我认为它使用了Brython,让我看起来很快,但我很确定,你可以仅通过从Vue组件核心派生出类似Vue组件的定义,例如,从Vue导入Vue组件,类hello vue.py,括号,vue组件,在那里真的很有趣,因此。我不确定这是一个好主意,但这是一个非常有趣的主意。也许这是个好主意。这取决于你要构建的内容,对吧?就像你要构建的东西实际上并没有设置要下载一样,例如我认为Brython元素之类的东西,并不是完全小,而是要下载的JavaScript才能正常工作。但是,它是Brython,所以仍然,例如,如果它是一个脱机应用程序,或者是一个Intranet应用程序,或者它将被捆绑到类似Electron.js之类的东西中,那么你就不必关心文件大小了,的确如此,因此Vue.py非常有趣。那是93到96天,人们可以检查一下。有一个使用Axios和Vue.js使用电影服务API的示例。好的,我们的课程和我们要讨论的主题都差不多。我们涵盖了很多,对吧?
59:05 Panelists: 是的,讨论了许多的技术,涵盖了差不多6个月的内容。
59:08 Michael Kennedy: 是的,这只是我们涵盖的12个主题。 如果你们加倍,也许是13或14。 在此过程中,我们实际上涵盖了这些不同领域中的28个不同技术主题,这非常疯狂。 所以让我问问这两个。 在经历了所有这些主题并对其进行研究和研究之后,从总体上探索网络的整个经历中,你有什么收获?
59:33 Panelists: 好的,对我来说,我只是说那里有太多东西。如果你听到在Twitter上听到的所有杂音,或者听到所有发现的东西,或者阅读发现的所有内容,而实际上并没有选择要重点关注的东西,那么你永远不会学习任何东西,所以我的收获是,那里有各种各样的JavaScript框架。有各种各样的Python网络框架。选择一个,了解完成工作所需的知识,然后对此感到满意,因为总会有其他事情可能会做得更好,然后一旦事情做好,就可能看看可能会迭代的其他事物,但是,我简直不敢相信,因为我正在做大量研究,所以我不敢相信里面有多少东西,正如你所说的,迈克,很快就会出现新的事物,因为当我们开始制作本课程时,还有很多东西都没有成型,但是现在已经冒出来许多了。
1:00:31 Michael Kennedy: 反之亦然。
1:00:33 Panelists: 是的,比如说,肯尼斯·雷茨(Kenneth Reitz)制造的那个库是什么? 是他提出的另一个requests,而不是requests?
1:00:44 Michael Kennedy: Responder库?
1:00:44 Panelists: 我很确定是Responder,是在我们进行本课程时,他写出来的,这样的事情将一直发生,所以这就是为什么我是Flask和鲍勃负责Django。
1:00:57 Michael Kennedy: 鲍勃,你对此有何看法?
1:00:56 Panelists: 我的,他们很相似。 发生的事情太多了,很容易被吓到并且令人生畏,但是我认为这取决于掌握基本原理,因此对我来说,确实是一些HTML,CSS和JavaScript。 你绝对希望至少了解这些基础知识,是的,对于Python,请研究一下框架。 有些人更喜欢Flask,自己动手或Django(一套完整)。 我更喜欢后者,然后我猜想在你选择的框架中更深入。 另一个基本原则是,我总是建议你了解一些数据库技能,甚至是一些原始的SQL,是的,所以要了解基本原则,然后选择自己喜欢的工具并深入研究。
1:01:46 Michael Kennedy: 是的,这是个很好的建议,朱利安,你是对的,你可以花时间不断地追逐下一个新事物,而且它们来来往往如此之快,以至于你永远都不会真正到达某个地方如果你继续这样做,则可以做一些具体的事情并在其上进行构建。就像,只选择其中之一,开始学习,对吧?如果你最终确定自己喜欢更好的东西,则可以稍后再过渡到下一个项目,但是你可以将其放到地面,然后从某个地方开始。我想指出的另一点是,你不必学习JavaScript即可构建不错的Web应用程序,对吗?或者,如果这样做的话,这是非常小的量。就像,如果你听网络上的人们交谈,就像,你知道了,Angular,并且你知道了,但是绝对可以构建Django,Flask,Pyramid等很棒的东西,仅使用服务器端的东西,像是一堆互动式的杂音,集中显示此文本框,或者显示此对话框,仅此而已。你可以只学习Python,也可以只学习JavaScript,但不必一定要并行学习它们。
1:02:48 Panelists: 是的,我认为这很重要,尤其是当社区中的人们问“我想创建一个博客,我需要学习Django”时。 很好,但是你实际上可以使用静态站点和GitHub,对吗? 因此,你实际上不必学习Django本身。 我肯定会真正看一下你要构建的内容,然后尝试选择正确的工具,因为这样做很容易过度。
1:03:10 Michael Kennedy: 是的,也许是Netlify和Pelican之类的。
1:03:12 Panelists: 对的。
1:03:13 Michael Kennedy: 是的,很酷,谈论这些很有趣。 不过,在我们结束本期节目之前,让我问两个问题。 如果你要编写一些Python代码,鲍勃,你使用什么编辑器?
1:03:23 Panelists: Vim.
1:03:26 Michael Kennedy: Vim?
1:03:26 Panelists: 是的,Vim,习惯的原因。
1:03:29 Michael Kennedy: 很酷,朱利安呢?
1:03:32 Panelists: 恩,我本来要说的是Vim,因为那是我所使用的,但是,如果我选择其他的,我实际上会坚持使用Notepad ++。 真的很喜欢。
1:03:41 Michael Kennedy: 是的,很酷。 而且我想我也会把PyCharm放在那里。 对人们来说不是一个很大的惊喜。 现在,值得注意的是PyPI软件包,我的意思是,例如,我们探索了100多种不同的PyPI软件包,例如,你了解的各个部分,以及与之交互的所有内容的依存关系等等。 因此,你一定会喜欢一些东西,“我甚至都不知道,这真的很酷。” 鲍勃,你想先走吗?
1:04:06 Panelists: 我猜这集的问题是以前没有提到的值得注意的PyPI软件包。 所以我不能做Django。
1:04:14 Michael Kennedy: 我的意思是,如果你要这样说的话,那可能是你之前提到的内容。
1:04:16 Panelists: 是的,Django就不足为奇了。 现在,用于网络抓取,两周前,我们遇到了实时代码挑战,我们正在抓取一些PyCon Spain网站数据和Beautiful Soup,这是一个很棒的程序包,可以轻松遍历DOM,我仍然对该程序包感到满意。 它非常易于使用,可以完成工作。
1:04:41 Michael Kennedy: 是的,你可以直接pip install bs4来安装。
1:04:43 Panelists: 或者更短。
1:04:47 Michael Kennedy: 朱利安呢?
1:04:47 Panelists: 实际上,它与Web内容无关,因为Flask在这里对我来说毫无疑问。 但是我一次又一次地使用,尤其是在工作中,实际上是Pexpect。 你们听说过吗?
1:04:59 Michael Kennedy: 没有。
1:05:00 Panelists: 它是一个小的自动化库或模块。 它的主要功能几乎是自动化交互过程,以提供可预测的输出,因此请考虑Telnet,SSH,Git以及类似的一切,以便你可以自动化发生的事情,因为你知道当你响应时会发生什么SSH到服务器。 你知道将会出现密码提示,因此,当你收到此确切提示时,可以输入密码,而且真的很酷。 显然有很多其他模块,但这是我真正喜欢的库模块。
1:05:35 Michael Kennedy: 哦,是的,这真的很酷。 它执行SSH,FTP,Telnet,各种很酷的东西。 我喜欢它,这就是为什么我问这个问题,因为我每次都会学到一些东西。 我要说的那个是Unsync。 所以我之前谈到过不同步。 它基本上统一了使用Python进行异步编程的所有不同方式,并在其上放置了async和await接口,这很漂亮,因为在单个Python文件中只有126行,但它基本上可以修复大多数Python的异步API。就像在这么少的工作量中发生的难以置信的事情一样,所以真的很喜欢那种方法,如果你正在执行异步编程,可以看一下。好的,伙计们,谢谢你在这里,朱利安,鲍勃。
1:06:20 Panelists: 也谢谢你再次邀请我们。
1:06:23 Michael Kennedy: 感谢与我一起完成这个课程,我们都学到了很多。能够与大家分享是一件很有趣的事。
1:06:28 Panelists: 下次见!
1:06:30 Michael Kennedy: 好的,再见,这是和我聊Python又一期节目。这集的来宾是Bob Belderbos和Julian Sequira。
【John:翻译结束。】