这是一本flask入门教程,可以快速获取flask开发的相关知识,跟随本书自己开发一个简单的watchlistFask入门教程这是一本 Flask入门教程,提供∫入门Fask所需的最少信息,你可以跟随本书自己动手开发一个简单的Watchlist程序。本书主页为http:/helloflask.com/tutorial关于作者我叫李辉,我是《 Flask Web开发实战》的作者, Pallets Team成员。你可以在我的个人主页了解更多关于我的信息。目录前言第1章:准备⊥作第2章:He‖o,Fask!第3章:模板第4章:静态文件第5章:数据库第6章:模板优化第7章:表单第8章:用户认证第9章:测试第10章:组织你的代码·第11章:部署上线小挑战后版权信息书名:F|aSk入门教程副书名:使用 Python和Fask开发你的第一个Web程序作者:李辉版本:1.0发布时问:20192.12018李辉( Grey Li)/ Helloflask. com本书采用 CC BY-NC-ND3.0协议授权,禁止商用、演绎后分发或无署名转载3前言Flask是一个使用 Python语言编写的Web框架,它可以让你高效的编写Web程序。Web程序即"网站”或“网页程序”,是指可以通过浏览器进行交互的程序。我们日常使用浏览器访问的豆蓱知乎、百度等网站都是Web程序通过这木书,你会学到Fask开发的基础知识,并开发出一个简单的 Watchlist(观影清单)程序。在功能上,这个程序可以看做是简化版的 IMDB Watchlist/豆瓣豆单:你可以添加、删除和修改你收藏的电景信息。●●●h Grey Li's Watcnlist)→ Localhost:s000Grey Li's Watchlist8 TitlesNameAddMy Neighbor Totoro- 1988Edit Delete)IMDbDead Poets Society-1989Edit)( Delete)IMDba Perfect work·1995Edit DeleteIMDbLeun- 1994Edit DeleteIMDbMahjong·199Edit) Delete)IMDbKing of Comedy-1999Edit) Delete)IMDbDevils on the Doorstep-1999Fdi)Delete)IMDbThe Pok of Music-2012Edit DeleteIMDb你可以访问htp:/watchlisthelloflask.com/查看示例程序的在线Demo本书特点基于 Flask最新的1.0.2版本使用个 Watchlist程序作为示例复原完整的开发流程4只提供入门所需的最少信息优化术语解释,史容易理解阅读方法本书复原了编写这个 Watchlist程序的完整沇程,包括每·行代码块,每个需要执行的命令。在阅读时,你需要自己输入每一个代码和命令,检查输出是否和书中一致。在这个过程中,你也可以对它进行一些调整。比如,示例稈序的界面语言使用了英文,你可以修改为中文或是其他语言。对于贞面布局和样式,你也可以自由修改。在本书的最后,你会把你自己编写的 Watchlist部署到互联网上,让任何人都可以访问。讨论与反馈如果你有仟何疑问和想法,欢迎通过下面的方式提出在 Helloflask论坛发布帖子,并选择" Flask入门教程”分类。在专栏对应的连载文章下面撰写评论在源码仓库创建 ssue。相关资源·本书主页:http://helloflask.com/tutoria·木书论坛:https://discuss.helloflask.con本书源码:https://github.com/greyly/flask-tutorial本书示例程序源码:htts;/ github. com/greyli/watchlist·示例程序在线Demo:http://watchlist.helloflask.com5第1章:准备工作在通过这本书学习Fask开发前,我假设你」解了 Python和HTML的基础知识。你的 Python版本可以是2.7,也可以是33及以上版本。电脑的操作系统可以是 Windows,也可以是 macOS或Linux安装编辑器和浏览器对于编辑器来说,每个人都有不同的偏好,你可以自由选择。可以选择功能丰富的|DE(集成开发环境),比如 Py Charn;也可以选择相对轻量的编辑器,比如Atom或 Sublime text。浏览器建议使用 Firefox或 Chrome使用命令行在本书中,你需要使用命令行窗口来执行许多操作。你可以使用 Windows下的 cmd. exe,或是macoS和 Linux下的终端( Terminal)。下面我们执行一个最简单的 Whoami命令(即 Who amgreyly这个命令会打印出当前计算机用户的名称。其他常用的命令还有cd命令,用来切换目录( change directory); mkdir命令,用来创建目录( make directory)。在不同的操作系统上,执行某个操作的命令可能会有所不同,在必要的地方,书里会进行提示我们先来为我们的程序创建一个文件夹:S mkdir watchlists cd watchlist除非特别说明,从现在开始,木书假设你的工作目录将是在项目的根目录,即 watchlist/目录。为∫确保你已经正确安装」 Python,可以执行下面的命令测试是否有报错s python --versionPython 2.7.11对于 Windows用户,请使用 coder(一个基于 Con Emu实现的终端模拟器)来代替系统自带的cmd.exe,或是使用安装 Git for windows后(下一节)附带的 Git bash。 coder集成了GitBash,支持一些在 Linux或 macos下才能使用的命令(程序),比如ls、cat、nano、sh等,这些命令我们在后面会用到。6使用Gitoit是一个流行的版本控制工具,我们可以用亡来记录程序源码和文件的变动情况,或是在编程时进行多人协作,你可以把它看做一个优雅的代码变动备份工具如果你还不熟悉Ct也没关系,可以先按照书中的命令去做,有时间再去了解原埋。现在要做的第一件事就是在你的电脑上安装Gt(可以执行git-help命令检查是否已经安装,没有提示“命令未找到( Command not found)”则表小已安装)。安装后可以在命令行先使用使用下面的命令查看版本,没有报错则表示已正确安装:f git --versiongit version 2.17.1为了让Git知道你是谁,以便在提交代码到版本仓库的时候进行记录,使用下面的命令设置你的信git config--g1oba1user.name" Grey Li”#替换成你的名字gitconfig-g1obaluseremai1"with1ihui@gmai1.com"#替换成你的邮箱地址现在为我们的项目文件夹创建一个Gt仓库,这会在我们的项目根目录创建一个gt文件夹git initInitialized empty Git repository in m/watchlist/git/Git默认会追踪项目文件夹(或者说代码仓斥)里所有文件的变化,但是有些无关紧要的文件不需要记录变化,我们在项目根目录创建一个 gitignore文件,在文件中写入忽略文件的规则。因为文件内容比较简单,我们直接在命令使用nano来创建:s nano gitignore在nano编辑界面写入常见的可忽略文件规则:pyopy cacheDs Store使用 Control+O和εηter键倮存,然后按下Conηtrol+Ⅹ键退出。在后续章节,对于简单的文件,都会使用nano创建,这部分操作你也可以使用编辑器来完成将程序托管到 Github(可选)这一步是可选的,将程序托管到 GitHub、 Gitlab或是 BitBucket等平台上,可以更方便的备份协作和部署。这些托管平台作为Gt服务器,你可以为本地仓库创建远程仓库。首先要注册一个 Github账户,点击访问注册页面,根据指示完成注册流程。登录备用。设置SSH密钥般情况下,当推送本地改动到远程仓库时,需要输入用户名和密码。因为传输通常是通过SSH加密,所以可以通过设置SSH密钥来省去验证账号的步骤。首先使用下面的命令检查是否已经创建了SSH密钥s cat v/ssh/id rsa. pub如果显示 No such file or directory",就使用下面的命令生成SSH密钥对,否则复制输出的值备用s ssh-keygen路按下 Enter采用默认值,最后会在用户根目录创建个.ssh文件夹,其中包含两个文件,id rsa和 id rsa.pub,前者是私钥,不能泄露出去,后者是公钥,用于认证身份,就是我们要保存到 Github上的密钥值。冉次使用前面提到的命令获得文件内容:s cat m/ssh/id rsa. pubssh- rsa aaaab3Nza.省略N个字符...3 aph book@grey1i选中并复制输出的内容,访问 Github的SSH设置页面(导航栏头像- Settings- SSH and gPgkeys),点击 New SSH key按钮,将复制的内容粘炻到Key输入框里,再填一个标题,比如“MyPC”,最后点击“ Add sSh key按钮侏存。创建远程仓库访问新建仓库页面(导航“+”- New repository),在“ Repository name"处填写仓库名称,这里填“ watchlist即可,接着选择仓库类型(公开或私有)等选项,最后点击“ Create repository”按钍创建仓库。因为我们已经提前创建了本地仓库,所以需要指定仓库的远程仓库地址(如果还没有创建,则可以直接将远程仓库克隆到木地):$gitremoteaddorigingit@github.com:grey1i/atch1ist.git#注意是换地址中的用户名这会为本地仓库关联一个名为 origIn"的远程仓库,注意将仓库地址中的“ greyly”换戌你的 Github用户名。8创建虚拟环境虚拟环境是独立于 Pythoη全局环境的 Python解释器环境,使用它的好处如下:侏持全局环境的干净指定不同的依赖版本方便记录和管理依赖我们将使用 Pipenν来创建和管理虚拟环境、以及在虚拟坏境中安装和卸载依赖包。它集成了pijρ和 irtualeny,可以替代这两个工具的惯常用法。另外,它还集成了 Pipile,它是新的依赖记录标准,使用 Pipile文件记录项目依赖,使用 Pipfile lock文件记录固定版本的依赖列表。这两个文件替代∫手动通过 requirements txt文件记录依赖的方式我们首先使用pip安装 Pipenv, Windows系统使用下面的命令s pip install pipenvLinux和 macOS使用下面的命令:s sudo H pip install pipen使用 Piper创健虚拟环境非常简单,使用 pipenv insta1l命令即可为当前项目创建一个虚拟环境s pipenv install这个命令执行的过程包含下面的行为:为当前目录创建一个 Python解释器环境,按照pip、 setuptool、 virtualeν等工具库如果当前目录有 Pipile文件或 requirements. txt文件,那么从中读取依赖列表并安装。如果没有发现 Pipile文件,就自动创建。创建虛拟环境后,我们可以使用 pipenv shel1命令来激活虚拟环境,如下所示(执行exit可以退出虚拟环境)s pipenv shell注意除了 pipeny instal1命令和Gi相关命令外,除非特别说明,本书后续的所有命令均需要在激活虑拟环境后执行。如果你不想每次都激活虚拟环境,可以在命令前添加 pipenv run前缀,比如 pipenv run pip1ist即表小在虚拟环境内执行pip1ist命令安装Fask无论是否已经激活虚拟环境,你都可以使用下面的命令来安装Fask9多 pipenv install flask这会把Fask以及相关的一些依赖包安装到对应的虚拟环境,同时 Pipen会自动更新依赖文件。提示如果你没有使用虚拟环境,记得将Fask更新到最新版木( pip insta11-Uf1ask)本章小结当你进行到这里,就意味这我们已经做好学习和开发Fask程序的全部准备了。使用 git status命令可以查看当前仓库的文什变动状态:s git status下面让我们将文件改动提交进Gt仓库,并推送到在 Github上创建的远程仓库:s git adds git commit -mIm ready!git push- u origin master#如果你没有把仓库托管到 Github,则跳过这条命令,后面章节亦同这里最后一行命令添加了-u参数,会将推送的目标仓库和分支设为默认值,后续的推送直接使用gitpush命令即可。在GitHub上,你可以通过htps:/github.com你的用户名/watchlist查看你的仓库内容提示你可以在 GitHub上查看本书示例程序的对应 commit:1b6fe4a进阶提示阅读MDN的《web入门教稈》(了解HTML、cSs、 Java Script)。阅读短教程《Git简明指南》阅读文章《 Pipenv:新一代 Python项目环境与依赖管理工具》或 Pipenv官方文档。如果你打算开源你的稈序,在项目根目录中添加一个 README.md(自述文件)和 LICENSE(授权声明)是很有必要的。详情可以访问○ pen Source Guides∫解。在安装 Pipenv时,你也可以使用-ue选项进行用户安装(即 pip install-userpiper)。用户安装可以避兔破坏全局的包,而且可以避兔对不可信的包使用 sudo pip导致的潜在安全问题。详情见 Pipenv文档安装章节10