Flask是轻量级的框架,自由、灵活、可扩展性强,核心基于Werkzeug WSGI工具和jinja2模板引擎。
适用于做小网站以及web服务的API,开发大型网站无压力,但架构需要自己设计。
与关系型数据库的结合不弱于Django,而与非关系型数据库的结合远远优于Django。
我们博客的设计是全站顶部菜单为通用菜单,调用的数据为文章的分类,那么如何将文章分类数据传递到每个页面的上下文呢?
为了将新变量自动注入模板的上下文中,Flask 中存在上下文处理器context_processor。上下文处理器在呈现模板之前运行,并且能够将新值注入模板上下文。上下文处理器是返回字典的函数。然后,对于应用程序中的所有模板,此字典的键和值将与模板上下文合并:
用法如下所示,这只是一个例子:
上面的上下文处理器是一个名为 user 的变量在模板中可用,其值为 guser。这个例子不是很有趣,因为g无论如何都可以在模板中使用,但它给出了它是如何工作的。
变量不限于值;上下文处理器还可以使函数可用于模板(因为Python允许传递函数):
上面的上下文处理器使format_price函数可用于所有模板:
您还可以将format_price构建为模板筛选器,但这演示了如何在上下文处理器中传递函数。
知道了上下文处理器的用法,实现这个功能就非常简单了!
在RealProject目录的__init__py中插入如下一个上下文回调函数
这个函数通过limit()方法查询出前6个数据,并通过一个字典返回,之后我们还需要将该回调函数注册到app的工厂函数当中!
在app/blog/templates/basehtml中循环查出我们返回的数据即可
在app/blog/viewspy文件中的index首页视图函数中实现
这个视图函数中的查询逻辑在实现文章管理的时候已经实现过,这里唯一不同的区别就是我给这个返回数据新增了一个img的属性,因为在数据库我们没有设计文章形象图字段,我们用这种方式弥补,在imgs的列表中预设一些的url地址,之后随机抽取一个赋值给img属性,这样在模板中直接调用这个img属性就会获取到的url!
在app/blog/templates/basehtml中替换相关循环数据
在设计数据库字段的时候,我们将分类与文章设置为一对多关系,一个分类下可以有多篇文章,那么导航栏通过上一节我们已经实现了,那么这一节我们就实现每个分类下的文章列表页!
在app/blog/viewspy中实现分类页视图
这个函数的逻辑也是在之前管理后台的时候多次实现,这里我们用了filter的查询方法根据url传进来的分类主键id来查询当前分类下的数据,并对其进行分页!
在app/blog/templates/中创建一个cate_listhtml的模板文件
该模板中我们查询出了刚才视图中返回的数据,并继承basehtml实现了一个一本的样式!
在app/blog/viewspy中实现文章详情页视图
这段代码不仅实现了文章详情页,还实现了上一篇及下一篇的功能!
通过url我们分别传入了分类cate_id以及当前文章post_id两个主键,之后根据这两个主键获取所属分类的及文章,代码如下:
在这里我们同时实现了详情页的上一篇及下一篇的功能,根据当前文章的id来判断筛选出上一篇和下一篇!代码如下:
在app/blog/templates/中创建一个detailhtml的模板文件
路径: app/blog/templates/basehtml
路径: app/blog/templates/basehtml
Flask 是一个微框架(Micro framework),其官方文档的前言部分对Flask做了很清楚的定性介绍:
“微”(Micro)是什么意思?
“微”(micro) 并不意味着你要把整个web应用放到一个python文件里(虽然确实可以),也不意味着Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心功能的简单而易于扩展。Flask 不会替你做出太多决策,比如使用何种数据库。而那些 Flask 帮你做好的决策(比如使用哪种模板引擎),都是很容易替换。除此之外的一切都由可由你掌握。
默认情况下,Flask 不包含数据库抽象层、表单验证,或是任何已在其它已库中处理的很好的功能。相反,Flask 支持通过扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理及各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在复杂的生产环境中投入使用。
Flask尽量避免重复制造轮子,而是与已有的优秀轮子去结合,这使得Flask灵活、强大,且定制性更强。 Flask 配置选项众多,均设置了合理的默认值,并会遵循一些惯例;配置选项均可以修改,但通常没必要修改,尤其是刚开始的时候。这使得Flask易于上手。
这个问题经常难道新手一下,因为大部分教程里(包括经典的《Flask Web开发》一书),告诉了我们如何使用flask-sqlalchemy *** 作sqlite,但在生产环境(线上网站)上,我们肯定是使用MySQL或其他,而大部分的教程里,又告诉我们flask-sqlalchemy使
以上就是关于flask 是做什么的全部的内容,包括:flask 是做什么的、Flask博客实战 - 实现全站导航菜单及首页数据展示、Flask博客实战 - 实现文章列表页及详情页等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)