个人博客

博客是典型的CMS(Content Management system,内容管理系统),通常由两部分组成:一部分是博客前台,用来展示开放给所有用户的博客内容;另一部分是博客后台,这部分内容仅开放给博客管理员,用来对博客资源进行添加、修改和删除等操作。

在这个项目,我们会学习更高级的项目组织方式。另外,我们还会学习使用扩展Flask-Login实现用户认证,这样就可以区分请求的来源客户端的身份,然后根据不同的身份返回不同的响应。

安装和激活虚拟环境

D:\flask\personalBlog>pipenv install --dev

这里用原作者的pipfile和pipfile.lock(放到项目根目录下),来安装虚拟环境的时候指定需要安装的第三方包及其版本

pipfile.lock是根据pipfile和当前环境自动生成的JSON格式的依赖文件

激活虚拟环境

大型项目结构

对于中小项目来说,使用程序包足以满足开发的需求。但如果项目更加复杂和庞大,我们就要学习一些进阶的项目组织技巧。在这一章,我们会学习用工厂函数和蓝本等技巧来进一步组织flask程序。

当某一个模块包含太多代码时,常见的做法是将单一模块升级为包,然后把原模块的内容分离成多个模块。在personalBlog程序中,视图模块views.py被转换成personalPrints子包,views.py的内容按照类别分离成auth.py、blog.py和admin.py三个模块。另外,模板文件夹内新创建了三个子文件夹:author、blog、admin,分别存放各自分类的模板。

personalBlog的程序包的主要文件结构如下所示:

personalblog/

blueprints/

__init__.py

blog.py

auth.py

admin.py

templates/

admin/

auth/

blog/

base.html

macros.html

static/

forms.py

models.py

emails.py  电子邮件

utils.py    辅助函数

fakes.py   虚拟数据

extensions.py  扩展

和messageBoard程序相比,personalBlog的程序包的根目录下新出现了4个脚本:

utils.py用来存储各种辅助函数(即utilities的简写),比如之前介绍的用于重定向回上一个页面的redirect_back()以及验证URL安全性的url_safe()。

fakes.py脚本存储虚拟数据生成函数。随着程序变大,我们需要生成大量不同种类的虚拟数据。比如,为了模拟一个虚拟博客,我们需要创建虚拟的博客信息、文章、分类和评论。使用函数可以更方便地组织这些虚拟数据生成代码,并且更易于重用。

emails.py用来存储发送电子邮件的函数。为了更方便使用,除了通用的发信函数,我们还会创建特定的发信函数。比如,用户发送新评论提醒的函数。

extensions.py用来存储扩展实例化等操作。

和大多数脚本一样,这些脚本的命名没有固定高要求,你可以自由修改。比如,utils.py也可以命名为helpers.py,fakes.py也可以命名为dummies.py或是vdatas.py。

一般来说,模块升级为包后的名称应该和模块名称相同。比如,如果表单类太多,我们会创建一个forms子包,然后在子包内创建auth.py、admin.py和blog.py模块组织代码。有一处你可能会感到奇怪,我们这里把views.py升级后的包命名为blueprints(蓝本)。事实上,你当然也可以命名为views,使用blueprints是因为我们将使用蓝本来组织视图。蓝本提供了更强大的组织能力,使我们能够在程序功能层面模块化程序,而不仅仅是代码组织层面。下面会详细介绍蓝本的概念。

flask实战-个人博客-虚拟环境、项目结构的更多相关文章

  1. flask实战-个人博客-电子邮件支持

    电子邮件支持 因为博客要支持评论,所以我们需要在文章有了新评论后发邮件通知管理员.而且,当管理员回复了读者的评论后,也需要发送邮件提醒读者. 为了方便读者使用示例程序,personalBlog中仍然使 ...

  2. flask实战-个人博客-模板 --

    模板 personalBlog采用典型的博客布局,左侧三分之二为主体,显示文章列表.正文:右侧三分之一为边栏,显示分为类列表.社交链接等.现在的工作是将HTML文件加工为模板,并创建对应的表单类,在模 ...

  3. flask实战-个人博客-使用蓝本模块化程序

    使用蓝本模块化程序 实例化flask提供的blueprint类就创建一个蓝本实例.像程序实例一样,我们可以为蓝本实例注册路由.错误处理函数.上下文处理函数,请求处理函数,甚至是单独的静态文件文件夹和模 ...

  4. 25、Flask实战第25天:项目结构搭建

    创建一个虚拟环境bbs,并安装flask框架 #cmd进入DOS窗口 mkvirtualenv bbs pip install flask 在本地磁盘D新建项目目录:bbs 打开pycharm,创建f ...

  5. flask实战-个人博客-编写博客前台

    编写博客前台 博客前台需要开放给所有用户,这里包括显示文章列表.博客信息.文章内容和评论等功能功能. 分页显示文章列表 为了在主页显示文章列表,我们要先在渲染主页模板的index视图的数据库中获取所有 ...

  6. flask实战-个人博客-数据库-生成虚拟数据 --

    3.生成虚拟数据 为了方便编写程序前台和后台功能,我们在创建数据库模型后就编写生成虚拟数据的函数. 1)管理员 用于生成虚拟管理员信息的fake_admin()函数如下所示: personalBlog ...

  7. flask实战-个人博客-表单

    表单 下面我们来编写所有表单类,personalBlog中主要包含下面这些表单: 登录表单: 文章表单: 评论表单: 博客设置表单: 这里仅介绍登录表单.文章表单.分类表单和评论表单,其他的表单在实现 ...

  8. flask实战-个人博客-程序骨架、创建数据库模型、临接列表关系 --

    编写程序骨架 personalBlog的功能主要分为三部分:博客前台.用户认证.博客后台,其中包含的功能点如下图所示: 数据库 personalBlog一共需要使用四张表,分别存储管理员(Admin) ...

  9. flask实战-个人博客-使用类组织配置

    使用类组织配置 在实际需求中,我们往往需要不同的配置组合.例如,开发用的配置,测试用的配置,生产环境用的配置.为了能方便地在这些配置中切换,你可以把配置文件升级为包,然后为这些使用场景分别创建不同的配 ...

随机推荐

  1. css 制作菜单

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  2. 版本管理_svn_检出_更新_提交_本机 MAC 地址_冲突

    版本管理 git svn [subversion] 实现集中式的版本控制工具软件 来源于最初的工程图纸. 需求: 备份还原 协同修改 权限控制 弊端:集中式(管理方便,但是如果中心服务器瘫痪,整个开发 ...

  3. (59)Wangdao.com第十天_JavaScript 对象在 栈和堆

    对象的属性值 如果要使用特殊的属性名,需 对象["属性名"] = 属性值       // 存 对象["属性名"]       // 取 obj["1 ...

  4. vue_v-for_遍历数组_遍历对象

    1. v-for 遍历数组 html <div id="test"> <ul> <li v-for="(p, index) in perso ...

  5. Java课后作业之石家庄地铁系统PSP表格20190403

    PSP2.1 Personal Software Process Stages Time Planning 计划 36 hours · Estimate · 估计这个任务需要多少时间 36 hours ...

  6. Linux命令行抓包及包解析工具tshark(wireshark)使用实例解析

    在Linux下,当我们需要抓取网络数据包分析时,通常是使用tcpdump抓取网络raw数据包存到一个文件,然后下载到本地使用wireshark界面网络分析工具进行网络包分析. 最近才发现,原来wire ...

  7. apt-get安装mysql

    1,检查是否已安装. 2,安装: apt-get install mysql-client-core-5.5 apt-get install mysql-server mysql-client 安装过 ...

  8. mysql主从服务搭建

    一.安装mysql 检测当前centos是否安装了mysql:yum list installed | grep mysql yum list installed | grep mariadb    ...

  9. js获取浏览器和设备的 width和height,

    获取宽高参考: 方法: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...

  10. webservice学习教程(一):理论

    一. WebService到底是什么? webservice是一种跨平台,跨语言的规范,用于不同平台,不同语言开发的应用之间的交互 WebService是一个SOA(面向服务的编程)的架构,它是不依赖 ...