Flask的大型网站模板

第一次学习使用Flask的时候是为了赶鸭子上架,那时候python和flask的优势就出来了,没有任何网站开发经验,两天部署出一个简单的微信公众平台,说到底这都是开源的力量,开源让我们处处有免费的代码使用,甚至可以进行二次开发。一个流行的开源软件,势必会银乐公众的瞩目,然后经过社区或者开发人员的验证,我们可以非常放心的使用,不过那次开发仅仅使用flask的路由功能,然会数据都是通过make_response函数来手动构造的,随后潜心学习了Falsk,从《FlaskWeb开发:基于Python的Web应用开发实战》一书中,收货很多,坐着丰富的开发经验,给Pythoner和Flask爱好者带来了盛宴。

好了废话已经很多了,现在该正题了。Flask是Python中很流行的Web后端框架,其受欢迎度不输于Django,Flask是一个使用 Python 编写的轻量级 Web 应用框架。有些人喜欢叫Flask是微框架,下面给出一些解释:

“微”并不代表整个应用只能塞在一个 Python 文件内,当然塞在单一文件内也是可以的。 “微”也不代表 Flask 功能不强。微框架中的“微”字表示 Flask 的目标是保持核心既简 单而又可扩展。 Flask 不会替你做出许多决定,比如选用何种数据库。类似的决定,如 使用何种模板引擎,是非常容易改变的。 Flask 可以变成你任何想要的东西,一切恰到 好处,由你做主。

所以Flask相当小型,而且开发起来也很顺手。现在,如果要使用Flask进行大型网站开发,怎么办?Flask其实提供了开发网站的方式,我们可以从程序结构上来入手。让我们慢慢进入主题。

一、Flask的Web引擎

对Web或者TCP/IP有所研究的人,都对HTTP不陌生吧,HTTP其实是一个非常简单的协议,运行在可靠的TCP层,然后通过四种方法来对服务器资源进行控制,当然现代的Web应用,让HTTP支持更多特性,必须长连接什么的~

在Python中有WSGI(Web Server Gateway Interface)来定制一个Web应用应该如何响应客户端的HTTP请求,在Flask,以来两大底层库,Werkzeug作为WSGI的工具箱,还有一个Jinja2的模板引擎。他们已经被深度集成在Flask中,在开发时,路由和响应使用了Werkzeug,render_temolate函数应用了Jinja2。

二、Flask的MVC影子

我不能断言Flask是依照MVC设计的,但是确实可以进行类似MVC的程序设计,这也是第一部分为什么非要说明Python的底层库,MVC互联网上有更专业的说明。

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
Model(模型)表示应用程序核心(比如数据库记录列表)。
View(视图)显示数据(数据库记录)。
Controller(控制器)处理输入(写入数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
  通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
  通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
  通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

对于Flask来说,可以进行如下对照:
- Flask的路由功能,属于MVC的Controller,控制请求的响应方法;
- 对于路由覆盖的函数,就是MVC的View,处理请求,并返回需要渲染的html;
- 而类似的SQLalcehmy,就是MVC的Model,利用ORM或者预封装的数据模型,来控制数据的修改和更新。

当然,对于Flask来说,或者说现代的Web架构来说,这里面有许多边界模糊的地方,但是我们可以根据MVC模型指引,来引出对Flask的结构化开发,来达到软件的耦合度降低,减小软件维护难度。
需要说明的是,Flask并没有提供ORM模型,需要使用别的开源程序,比如流行的SQLAlchemy,ORM可以让我们更注重数据模型的建立,并建立数据绑定行为,来降低Model模型的耦合度。

三、大型网站的程序结构

有了前几部分的铺垫,我们现在可以说明基于Flask的Web程序结构了,让我们先一睹为快:

|-Project|-app/|-templates/|-static/|-user/|-__init__.py|-forms.py|-views.py|-main/|-__init__.py|-errors.py|-views.py|-models.py|-__init__.py|-requirements.txt|-config.py|-manage.py

让我们基本介绍一下各文件的作用:
* manage.py
该脚本是开发者与程序的交互入口,比如启动Web程序,调试数据库,运行自定义命令等等
* config.py
该脚本是Web的配置文件,基本包括了该Web应用需要的配置信息,比如某些常数配置,或者环境变量(通常是处于保护隐私),数据库配置等等
* requirements.txt
该文件由pip自动生成,是本应用的python环境依赖包及其版本。
* app文件夹
app文件夹是本Web程序的主要功能设计部分,包括了路由路径设计,模板文件,静态文件和模型设计。
由于app部分的重要性,我们继续展开讲。
1. 模板与静态文件
模板就是服务器传给客户端的视图部分,可以通过Jinja2的模板引擎吧需要的内容,渲染到模板中,然后通过网络呈现给用户。
静态文件是网页所以来的css样式、js脚本、图标等部分,这一部分可以在部署生产环境的时候,交给反向代理器去做,减小Web后端的负担。
2. 数据库模型设计
数据库模型一般由ORM方式设计,然后提高程序的可用性。
3. 功能设计
在真实的设计场景中,会涉及多个功能,比如用户登录,博客文章,评论,用户管理等等。这时我们可以把他们分开设计,然后用上述文件结构进行功能性划分,每个功能文件夹中依照具体需求,可能会有不同的设计文件,但是肯定会有views视图文件的,这个是功能展示的基础。

好了这就是一个可以良好Web架构的程序结构了,欢迎大家拍砖。随后我会开源一个模板工程,同时会出更多的教程来讲解这个模板工程的功能,及其使用。谢谢大家捧场~~

我的个人Github主页:GalaIO
一个开源的Flask博客系统:GalaCoding

Flask的大型网站模板相关推荐

  1. 大型综合股票金融财经门户网站模板源码

    帝国cms仿<云掌财经>网站源码 大型综合股票金融财经门户网站模板 +火车头采集 测试环境: phpstudy2018 数据库:mysql5.5 php5.5 apache 数据库链接修改 ...

  2. 帝国CMS仿《游戏鸟》模板源码/92kaifa版大型手机游戏门户网站模板

    帝国CMS仿<游戏鸟>模板源码/92kaifa版大型手机游戏门户网站模板 ☑️ 编号:ym434 ☑️ 品牌:帝国CMS ☑️ 语言:php ☑️ 大小:200MB ☑️ 类型:仿< ...

  3. B2B大型电子商务门户网站系统源码+160多套企业网站模板+安装搭建教程

    分享一个B2B大型电子商务门户网站系统源码,含160多套企业网站模板,完整的代码程序包和安装搭建教程. 系统特色功能一览: 1.独家新增160多套企业网站模板,企业模板多,意味着入驻商户可以更多选择不 ...

  4. 帝国CMS模板源码/大型手机游戏门户网站模板

    帝国CMS<游戏鸟>模板源码,APP下载类整站源码.手机游戏门户网站模板,大型手游门户网站模板. 支持PC与手机端同步生成html,需多端同步生成插件.

  5. 用python开发的网站多吗-django可以开发大型网站吗

    Django是可以开发大型网站的,国内的豆瓣就是典型Python+Django开发的. Django工作机制 1.用manage .py runserver 启动Django服务器时就载入了在同一目录 ...

  6. php编写大型网站问题集

    PHP以其易用性得到迅速的推广,但易用并不是说就能用好它,实际上许多程序员用它很容易的立一个个WEB应用系统,但又有多少人仔细的考虑过他们的代码,是否容易维护.是否足够健壮.否效率足够高.是否足够安全 ...

  7. 大型网站技术学习-3. 容器Docker与kubernetes

    大型网站技术基石篇-容器Docker与kubernetes Docker和Kubernetes的关系就如Xen与OpenStack. Docker是一种容器技术,和Hypervisor(KVM/Xen ...

  8. Flask框架四:模板继承以及豆瓣案例

    1.模板继承 ①为什么会有模板继承而不用include调用模板:include是引用模板的标签,将模板的内容直接显示,但是当页面有变化的时候,比如多了一个侧边栏的内容,或者想改输入框为按钮,这时候就要 ...

  9. 跟着架构师学习大型网站架构的技术细节:前端架构需要解决的问题

    前端架构需要解决的问题 前端网页就是这么简单,除去图片.视频等资源外只有三部分,即标记网页元素的HTML.设置元素样式的CSS和负责交互处理的JavaScript. 在软件开发上,普遍认为架构设计能把 ...

最新文章

  1. L09-10老男孩Linux运维实战培训-Nginx服务生产实战应用指南05(架构解决方案)
  2. 【SpringCloud】Ribbon-实例
  3. JavaScript 权威指南-学习笔记(一)
  4. 灰度图像--图像增强 锐化基础
  5. 13.2.9 中间件
  6. xxl子任务_XXL-JOB v2.0.2,分布式任务调度平台 | 多项特性优化更新
  7. 后台命名查询sql查某几个字段传到前台
  8. C语言-- 大端小端详解
  9. android中wifi输入的密码保存的路径
  10. 50道编程小题目之【水仙花数】
  11. MATLAB+simulink仿真学习
  12. 如何开机进测试内存软件,小U讲解内存检测工具memtest详细使用教程
  13. Debian修改IP地址
  14. 脱壳(中) 脱壳的方法
  15. IE浏览器url中出现中文访问404问题解决
  16. methodinvocationexception: property ‘driverclassname‘ threw exception; nested exception is java.lang
  17. Android动画(翻牌抽奖)
  18. MATLAB代码:基于模型预测控制的楼宇负荷需求响应研究
  19. 基于pyqt5开发的图书管理系统UI(带登录页面)
  20. 面向用户界面设计,故障诊断程序集成设计(以CWRU为例)

热门文章

  1. 对“剖析液晶屏逻辑板TFT偏压电路”一文的一点看法(上)
  2. 最新PHP对接微信支付,发起商家转账API,商家转账到零钱
  3. 微信支付-商家给小程序用户转账教程(全网最详细JAVA版)
  4. 【哈利波特】Sherbert Lemon对HP的解读之10
  5. python基础练习题:纳特拼音alaphabeta【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
  6. uni-app使用多彩色图标,阿里图库
  7. 随笔记:利用Apache设置反向代理
  8. 用eclipse和androidstudio和基于高德地图API开发的附近购平台的java服务端和android客户端数据库用mysql包括程序设计图
  9. 【Java实战小项目】考试系统
  10. 千淘万漉虽辛苦,吹尽狂沙始见金