《Flask Web开发》学习笔记
第一部分 Flask简介
前言:想熟练掌握一门web框架,为以后即将诞生的测试工具集做准备。为什么选择flask要做熟练掌握的一门框架,而不是其他的,最主要的原因是可以随意定制。
特别提醒:这本书的代码会提交在github,有基础的人可以直接看github的代码来学习flask。基础差还是建议买书来学习,书中会有对“为什么这么用?”的解答,可以增加对软件架构的深入理解
时间:阅读并操作完第一部分,做的总结
建议:文章中有不对的地方,希望你可以告诉我
一、梳理
第一部分是Flask框架的基础应用,作者Miguel Grinberg(后面简称MG),一位拥有25年开发经验的人(25年的经验肯定能解决很多的“坑”),这一部门会涉及到6个模块,来完成一个大程序需要的代码架构,书中很好的解释了一些问题。
1,程序的基本结构 # 初始化app、路由、视图函数、flask框架的设计理念
2,模板 # Jinja2模板引擎、Flask-Bootstrap、错误页面、静态文件、Moment本地化时间
3,web表单 # CSRF(Cross-Site Request Forgery)防护、form渲染、flask核心特性Flash
4,数据库 # 介绍SQL和NoSQL的区别、SQLAlchemy数据库框架、Flask-Migrate数据库迁移
5,电子邮件 # Flask-Mail包装了smtplib
6,大型程序的结构 # 安排代码结构
这6个模块会涉及到具体的技术细节,有些比较重要,有些很难理解(blueprint蓝图),这里都会进行记录。上面的内容以“概念地图”(什么是概念地图)的方式呈现,能够更好的理解各个之间的关系
二、要点记录
1,Flask程序都必须创建一个app实例,app实例是Flask类的对象,FLask(__name__)参数决定了程序的根目录
2,单个文件的程序,使用@app.route('/')装饰器来为函数注册路由
3,Flask支持动态url,在route装饰器中使用'/user/<name>',尖括号的内容就是动态部分
4,Flask使用上下文临时把某些对象变为全局可访问,使用前要确保将其激活:【程序上下文全局变量】current_app、g【请求上下文全局变量】request、session
5,Jinja2支持宏(等同python函数)
6,模板继承:如果父模板的block标签内不为空,要添加{{ supper() }};子模板extends命令声明该模板继承自哪里
7,url_for()不仅可以在视图函数中,而且还可以在模板中使用
8,Flask-Moment不仅要有moment.js,还要依赖jquery.js,而在flask_bootstrap中已经有jquery.js,所以要在模板引入momen.js
9,Flask-WTF的form能够防CSRF(跨站请求伪造)攻击,思路:在app内设置秘钥,Flask-WTF会生成加密token(令牌),再用token验证请求中的form数据的真假
10,Flask-WTF验证机制:每个form都继承自Form类,Form类定义表单一组字段,每个字段都用对象表示。字段对象可附属一个或多个验证函数,验证函数就是用来验证用户提交form的输入值是否符合要求
11,Flask-Bootstrap提供预先定义好的表单样式渲染整个Flask-WTF表单:{{ wtf.quick_form(form) }}
12,判断所有验证函数是否接收的字段:validate_on_submit() True/False
13,浏览器刷新会重新提交前一个请求,post表单请求需要重定向到get请求:使用Flask的redirect(url_for('index'))
*14,Flask的flash是核心特性:提醒用户的信息已经被更改
15,SQL数据库特点:列数固定、行数可变、特殊的列[主键]、表之间关联[外键],行之间的这种联系就是关系型数据库
16,NoSQL数据库特点:集合代替表,文档代替记录
17,Flask-SQLAlchemy是关系型数据库框架,要通过数据库会话session(事务)才能跟新数据库;数据库会话能保证数据库的一致性
18,Flask-Migrate对Alembic迁移框架做了轻量包装,并集成到Flask-Script;Alembic是SQLAlchemy的主力开发人员编写的迁移框架
19,Flask-Migrate使用:配置、init创建迁移仓库、migrate自动构建迁移脚本(要检查迁移脚本)、upgrade提交到数据库中
20,Flask-Mail使用异步+Celery任务队列将邮件发送迁移到后台线程,优化客户的加载体验
21,在单元测试中,需要在不同配置环境运行程序:使用程序工厂函数,可以动态修改配置,创建多个程序实例
22,程序工厂函数,让定义路由变的复杂,程序在运行时创建,只有调用create_app()之后才能使用app.route装饰器;flask提供的blueprint蓝图,就是解决这个问题
23,蓝图机制:蓝图中定义的路由处于休眠状态,直到蓝图注册到程序中,路由才成为程序一部分
24,蓝图使用:创建蓝图[登记]、注册蓝图;路由装饰器由蓝图提供、url_for('main.index'/'.index')使用改变
三、程序结构
《Flask Web开发》学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- #研发解决方案#研发协作平台CloudEngine
Cloud Engine:大杀器如何炼成 郑昀(微博:http://weibo.com/yunzheng) 创建于2016/6/18 最后更新于2016/6/19 点击查看我的<如何从零搭建一个 ...
- Python基础语法(三)
Python基础语法(三) 1. 数值型数据结构 1.1 要点 在之前的博客也有提到,数值型数据结构在这里就不过多介绍了.在这里提及一些需要知道的知识点. int.float.complex.bool ...
- C# 多线程学习笔记 - 1
本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段. 遵循原作者的 CC 3.0 协议. 如果想要了解更加详细的文章信息内容,请访问下列地址进行学习. 原文章地 ...
- FTP解决连接慢问题
今天发现程序报登录FTP超时,于是便手动登录发现真的慢,于是网上搜便获取大招亲测有效,于是怕忘的我马上记录下来,zzzzzzz!! 如下解决 vim /etc/vsftpd/vsftpd.conf 在 ...
- Linux命令之sftp - 安全文件传输命令行工具
用途说明 sftp命令可以通过ssh来上传和下载文件,是常用的文件传输工具,它的使用方式与ftp类似,但它使用ssh作为底层传输协议,所以安全性比ftp要好得多. 常用方式 格式:sftp <h ...
- Python合并多个Excel数据
安装模块 1.找到对应的模块 http://www.python-excel.org/ 2.用pip install 安装 pip install xlrdpip install XlsxWrite ...
- 基于winserver部署Apollo初次体验(附.net客户端demo)
前言 配置中心伴随着这几年分布式系统演变和微服务架构的兴起,已经成为必不可少的需求之一.试下一下如果哪天公司的所有应用服务,从公司服务器迁移到云服务,成千上万的配置,修改起来是多么耗时费劲的事(我们公 ...
- Quartz.NET学习笔记(一) 简介
Quartz.NET是一款开源的任务调度框架,他是由Java中的任务调度框架Quartz移植而来的.官方网站https://www.quartz-scheduler.net/. Quartz.Net的 ...
- centos7下误执行chmod -R 777 /后的权限修复方法
今天由于权限问题zz一般把/usr/bin和/usr/lib两个目录用chmod -R 777执行了一遍,结果各种问题出现,su root就报su:鉴定故障的错误.然后上网找教程很多都要求在root权 ...
- 【Java基础】【08面向对象_继承&方法&final】
08.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以 ...