是时候学习Web开发了,1小时用Python开发一个博客系统
来源:麦叔编程
作者:麦2叔
开发一个包含数据库的简单网站系统是Web开发入门的最好方式。
Flask是Python最热门的两个Web框架之一,是最简单易用,容易上手的框架。
本系列使用Python的Flask框架开发一个简易的博客系统,共用时约90分钟。整个文章分为3部分,今天是第2部分。第3部分本周日发布。
原计划是分成2部分,篇幅有点长,临时改成了3部分。
第1部分的链接:
是时候学习Web开发了!1小时用Python开发博客系统【1】
整个文章包括以下内容,第1部分涵盖前5部分,今天包含中间的3部分:安装flask创建项目运行你的第一个网站创建一个像样的网页用样式表美化网页使用模板和bootstrap创建文章数据库显示所有的文章显示一篇文章发布新文章修改文章内容删除文章关于麦叔页面
今天的文章信息量有点大,所有源代码都可以关注公众号麦叔编程,回复fff获得链接。
我们开始吧!上次我们已经创建好了flask程序和一个应用了基本样式的页面:
一、使用模板和Bootstrap
我们要继续美化页面。
大部分网站都有很多页面,这些页面都会共用同样的菜单栏。总不能开发没页面的时候都要把菜单栏写一遍吧?
这里就用到了模板的概念,我们创建一个模板,模板包含了菜单等共同的部分,而具体页面只要往模板中填空就行了。
我们的博客最终的样式是这样的,它包含了列表,新建,详情,修改,关于麦叔等多个页面。这些页面共用同一个模板。
1。下载JavaScript和CSS文件
我们需要用到jquery和bootstrap,先去我的git上下载这几个文件,下载方法:关注麦叔编程,回复210820。
下载完后分别放在static目录下的css和js目录下。其中js目录需要先创建出来。
2。在templates目录下创建一个新的文件:base。html!doctypehtmlhtmllangenheadmetacharsetutf8metanameviewportcontentwidthdevicewidth,initialscale1,shrinktofitnolinkrelstylesheethref{{urlfor(static,filenamecssbootstrap。min。css)}}title{blocktitle}{endblock}titleheadbodynavclassnavbarnavbarexpandmdnavbarlightbglight麦叔的博客buttonclassnavbartogglertypebuttondatatogglecollapsedatatargetnavbarNavariacontrolsnavbarNavariaexpandedfalsearialabelTogglenavigationspanclassnavbartogglericonspanbuttonulclassnavbarnavliclassnavitemactive关于麦叔liulnav{blockcontent}{endblock}bodyhtml
这里面信息量有点大,我来一个个解释:使用urlfor方法引入了前面下载的1个css文件和3个js文件。之前我们创建的style。css文件就没用了,可以删除了。在开头部分的{blocktitle}{endblock}是标题(title)占位符,相当于定义了名为title的变量,后面会被具体内容替换掉。在中间部分的{blockcontent}{endblock}是网页内容的占位符,相当于定义了名为content的变量,后面会被具体内容替换掉。
修改index。html中的内容{extendsbase。html}
{blockcontent}
{blocktitle}欢迎来看麦叔的博客{endblock}
{endblock}第一行extendsbase。html表示我们要使用前面定义的base。html这个模板。要使用这个模板,就要把模板中的两个占位符(两个填空题)给填写好。放在{blockcontent}和{endblock}中间的所有内容都会填写在content这个占位符中。放在{blocktitle}和{endblock}中间的内容会填写在title占位符中。注意这里的title变量会被重用。它既是title占位符的内容,也是content占位符的一部分。刷新页面,应该看到如下的效果。如果不是,仔细检查一下哪里是不是漏掉了,或者拼写错误了。这里虽然没有很大的变化,但是我们已经搭建好了模板,以后开发的页面内容都可以重用这个模板,而页面本身会变得很简单。二、创建文章数据库
博客系统会有很多文章,我们要把这些文章保存到数据库。
数据库有很多选择,比如MySQL,postgresql,Oracle,sqlite3等。
我们今天要使用最轻量级的数据库sqlite3,Python自带了这个库,所以不需要额外安装。在blog。py同目录下创建一个文件db。sql,里面是创建数据库表的SQL语句:DROPTABLEIFEXISTSposts;
CREATETABLEposts(
idINTEGERPRIMARYKEYAUTOINCREMENT,
createdTIMESTAMPNOTNULLDEFAULTCURRENTTIMESTAMP,
titleTEXTNOTNULL,
contentTEXTNOTNULL
);首先看看posts表是否存在,如果存在,先删除它。创建一个名为posts的表,其中包含id,title,content以及创建时间(created)等字段。在blog。py同目录下创建文件initdb。py这是一个python代码文件,它连接到sqlite数据库,执行上面的db。sql中的语句,然后再插入两条文章。具体细节见注释:importsqlite3
创建数据库链接
connectionsqlite3。connect(database。db)
执行db。sql中的SQL语句
withopen(db。sql)asf:
connection。executescript(f。read())
创建一个执行句柄,用来执行后面的语句
curconnection。cursor()
插入两条文章
cur。execute(INSERTINTOposts(title,content)VALUES(?,?),
(学习Flask1,跟麦叔学习flask第一部分)
)
cur。execute(INSERTINTOposts(title,content)VALUES(?,?),
(学习Flask2,跟麦叔学习flask第二部分)
)
提交前面的数据操作
connection。commit()
关闭链接
connection。close()打开一个命令行,运行initdb。py如果没有报错,就会发现文件夹下多了database。db,这就是数据库文件。三、展示文章列表
现在数据库里有两篇文章,我们可以使用python从数据库中获取数据,并且展现到网页上。修改blog。py,具体细节见注释importsqlite3引入sqlite3
fromflaskimportFlask,rendertemplate
appFlask(name)
创建一个函数用来获取数据库链接
defgetdbconnection():
创建数据库链接到database。db文件
connsqlite3。connect(database。db)
设置数据的解析方法,有了这个设置,就可以像字典一样访问每一列数据
conn。rowfactorysqlite3。Row
returnconn
app。route()
defindex():
调用上面的函数,获取链接
conngetdbconnection()
查询所有数据,放到变量posts中
postsconn。execute(SELECTFROMposts)。fetchall()
conn。close()
把查询出来的posts传给网页
returnrendertemplate(index。html,postsposts)
app。route(about)
defabout():
returnrendertemplate(about。html)修改index。html之前只显示了一个标题,现在要循环blog。py中传过来的posts列表,把每一篇文章显示出来。注意for循环在页面中的写法,和python代码很类似,只不过要用{和}包起来。{extendsbase。html}
{blockcontent}
{blocktitle}欢迎来看麦叔的博客{endblock}
{forpostinposts}
{{post〔title〕}}
{{post〔created〕}}
{endfor}
{endblock}刷新页面,应该可以看到这样的效果:如果不行,仔细对比一下,看看少了什么或者有没有拼写错误。
今天就到这里了,后面的部分会在本周日发布,到时候也会发视频到bilibili,请保持关注。
整个文章包括以下内容,第1部分涵盖前5部分,今天包含后面的部分:安装flask创建项目运行你的第一个网站创建一个像样的网页用样式表美化网页使用模板和bootstrap创建文章数据库显示所有的文章显示一篇文章发布新文章修改文章内容删除文章关于麦叔页面
人生寓言教案设计学习目标:1、正确理解寓言的含义;2、正确把握对人生的态度,对待人生的际遇;3、感受优美的语言,模仿文章美的表达。学习重点理解寓言的含义;学……
体育面试说课稿范文各位领导、老师、同学们大家好,鉴于我们学校是多年来的篮球传统校,为了让每个学生都对篮球运动有一定的了解和掌握一定的技战术,并能运用到平时的比赛,所以,我今天选讲的课题是初中教材……
大班语言嘟嘟鸭星球一、活动目标1、能认真听老师讲述故事,并能展开合理想象。2、能通过故事认识到环保的重要性。二、活动准备图片四张三、活动过程1、导入出示嘟嘟鸭图片并提问画中角色来引出嘟嘟鸭星球的……
荆轲刺秦王的教学反思1。主题明确。把经典的阅读教材与写作教材《人性光辉写人要凸显个性》相结合,让学生领悟要想写出个性鲜明的人物,首先要抓住能表现人物个性的细节,还要善于描绘个性化的语言、动作……
百发百中的意思是什么百发百中的意思:百发百中,形容射术高明,百不失一。比喻料事和打算极有把握。英文解释fireatthetargetahundredtimeswithoutasi……
课文包身工的教学设计【教学目的】1、理清文章脉络,概括课文的内容要点。2、理解文中有关语句的概括作用。3、认识包身工制度的残酷野蛮的反人道本质,接受情感教育。【教学重点】……
幼儿园小班艺术活动教案设计课题:风儿找妈妈活动目标:1、通过演唱歌曲,使幼儿能够体验、表达歌曲中思念妈妈的情感。2、引导幼儿唱准休止符与弱起旋律。3、在教师的指挥下练习双声部合唱……
高二语文备课组教学反思范文新学期开始后,语文学科的教学内容进入了《中国小说欣赏》的选修模块,中国小说欣赏这个模块给学生和老师勾勒出一个中国小说的大致模样,选修内容按不同的主题来区分的,当然我们的教学内容……
北师大版数学三年级上册交通与数学说课稿1、说教学内容《交通与数学》是义务教育课程标准实验教科书(北师版)三年级上册第52至53页的内容。2、说教学内容的作用、地位及意义交通与数学是三年级上册第五单……
在马克思墓前的讲话最新教学设计教学目的1体会恩格斯在文中表现的沉痛、敬仰之情,缅怀伟人丰绩;2理清文章思路,训练议论性文章阅读能力;教学设想1抓住悼词的一般特点,从伟人的友谊入手,体……
2019届高考语文精讲精练复习辨析并修改病句教案1第5讲辨析并修改病句【XX考纲解读】《考试说明》规定考查的病句类型有六种,即:搭配不当、语序不当、残缺或赘余、结构混乱、语意不明、不合逻辑。综观历年的高考语文病句辨……
用两个成语造句例子1、这个小孩每天手舞足蹈的,无忧无虑,显得多么快乐啊!2、我们不约而同的说明天出去玩,第二天我迫不及待的出去跟朋友们见面。3、你的设计独出新裁,令人眼前一亮。……
小老鼠的梦中班语言教案活动目标:1、理解、感受诗歌的有趣和梦境的奇妙。2、通过多媒体教学,帮助幼儿理解诗歌内容并且学会诗歌。3、培养孩子专心听讲的作为能力、能大胆地表演诗歌。……
公开课致女儿的信教学设计教学目标:1通过阅读,整体把握文章意思,品味含义深刻的语句。2体会运用小故事阐述抽象道理这一写法的好处。3了解爱情的特质,树立正确的爱情观。教学重点:……
茂盛的近义词是什么近义词是指意思相近或意义相同的词语,那茂盛有什么近义词呢?接下来小编为大家推荐的是茂盛的近义词,仅供参考。中文发音:茂盛moshng词语解释:指植物生长得好,枝繁叶……
关于积的变化规律的教学反思在乘法运算中探索积的变化规律是整数四则运算中内容结构的一个重要方面,这堂课以两组乘法算式为载体,引导学生探索当一个因数不变时,另一个因数与积的变化情况,从中归纳出积的变化规律。……
关于螳螂捕蝉的教学反思《螳螂捕蝉》一课是六下第三单元第10课的内容,讲述的是吴王不听大臣们的劝阻执意要攻打楚国,一个侍奉的少年用螳螂捕蝉的故事让他打消了攻打楚国的念头。通过学习要让学生弄清楚吴王攻打……
初中语文阅读理解我住的山林会唱歌附答案我待业期有一个空档,并很荣幸成为一名留守儿童助学团的老师。在经过骑马、徒步走了三天后,到达了山旮旯里的山林并住进一家农家小房。小房门前有一片茂密的山林,傍晚,我独自一人走出小房……
北师大版七年级上册历史第1课ampnbspampnbsp中华第1课中华大地的远古人类教学目标一、基础知识目标我国境内的最早人类元谋人的发现与距今年代;北京人的发现、地点与距今年代;北京人的体质特征、制造打制石器、使用天……
常识教案科学你追我逃活动目标:1、能在实践中大胆操作探索,了解和发现磁铁同性相斥的现象。2、能合理想象,创编故事,大胆讲述。3、通过活动体验成功的快乐。活动准备:1、……
晏子聘鲁阅读答案及翻译莫众而迷晏子聘鲁,哀公问曰:语曰:莫三人而迷,今寡人与一国虑之,鲁不免于乱,何也?晏子曰:古之所谓莫三人而迷者,一人失之,二人得之,三人足以为众矣,故曰莫三人而迷。今鲁国……
幼儿园小班小蜜蜂音乐备课教案设计思路活泼好动是孩子的天性,在幼儿园里,和孩子们一起跳集体舞,主要目的是让他们感受舞蹈的乐趣以及人际交往的快乐。三月,春暖花开的时节,小蜜蜂是孩子们常见也很喜欢的小动物……
纵横交错怎么造句纵横交错造句:1、自行车车辙纵横交错;光滑的斜坡显然被用来玩滑板或者死亡之幕的游戏,而且至少造成了几起膝盖骨摔伤和单车特技事故。2、在家里,明利用拐杖和轮椅四处走动……
平面镶嵌说课稿范文我在设计本课时,力求突出课题学习的特点,以问题为主线,以学生的动手操作实验活动为主,设计了丰富的拼图活动,让学生经过自己的操作和思考,体验和感受知识的形成过程,既激发了学生数学……