• 《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')使用改变

    三、程序结构

  • 相关阅读:
    一个非侵入的Go事务管理库——如何使用
    事件驱动的微服务-事件驱动设计
    事件驱动的微服务-总体设计
    如何快速高效率地学习Go语言
    清晰架构(Clean Architecture)的Go微服务
    清晰架构(Clean Architecture)的Go微服务: 编码风格
    清晰架构(Clean Architecture)的Go微服务: 事物管理
    清晰架构(Clean Architecture)的Go微服务: 依赖注入(Dependency Injection)
    msf stagers开发不完全指北(四): msf 中使用域前置技术隐藏流量
    elementui 表格中带有按钮的loading解决方案
  • 原文地址:https://www.cnblogs.com/1fengchen1/p/10120753.html
Copyright © 2020-2023  润新知