1.Flask基本认识

Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展包(数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。

核心:werkzeug和Jinja2

  • werkzeug是python的模块,封装了请求、响应、编码、数据认证等内容;
  • Jinja2是模板引擎;
  • Flask诞生2010年、简洁、轻量、扩展性强

2.框架的特点、异同、应用场景?

  • Django:集成度高、web项目需要的基本功能,都封装在框架中,ORM、CSRF、后台管理等;
  • Flask:简洁、轻量、扩展性强;

3.Flask 环境搭建

3.1使用虚拟环境创建虚拟环境,mkvirtualenv自行百度(这里略过)

3.2使用pycharm创建虚拟环境(推荐)





4.创建Flask简单应用

# 导入Flask类
from flask import Flask """
Flask类接收一个参数__name__
import_name
Flask程序所在的包(模块),传 __name__ 就可以
其可以决定 Flask 在访问静态文件时查找的路径
static_url_path
静态文件访问路径,可以不传,默认为:/ + static_folder
static_folder
静态文件存储的文件夹,可以不传,默认为 static
template_folder
模板文件存储的文件夹,可以不传,默认为 templates
"""
app = Flask(__name__) # 装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
return 'Hello World'
#app.add_url_rule("/",view_func=index) # 此方法和@app.route('/')类似,就是映射url与相应视图函数
# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
app.run()

5.应用程序配置参数设置(集中管理项目所有配置信息)

5.1配置文件

  • Django将所有配置信息都放到了settings.py文件中。

  • Flask将配置信息保存到了app.config属性中,该属性可以按照字典类型进行操作。

5.2flask获取配置信息

  • app.config.get(name)
  • app.config[name]

5.2Flask配置设置(主要有三种)

  • 加载配置对象:一般存储业务相关的配置信息,比如数据库配置、连接信息、各种初始化的配置信息等;

    • 优点:封装性好,可复用性强
    • 缺点:不安全;
  • 加载配置文件:

    • 复用性相对不好,不是很安全;
  • 加载环境变量:一般存储敏感信息,不适合对外公开的信息,比如密钥、签名等;

    • 使用相对复杂,更安全;
  • 总结:项目中使用第一种和第三种;

  • 不同的配置方式中,如果key是相同的,加载到的配置信息是哪个?最近调用的那个,记着每次调用都会把新调用中的配置信息覆盖以前的

  • 5.2.1从配置对象中加载app.config.from_object(配置对象)

    class DefaultConfig(object):
    """默认配置"""
    DEBUG_BOOLE=True app = Flask(__name__) app.config.from_object(DefaultConfig) @app.route("/")
    def index():
    print(app.config['DEBUG_BOOLE'])
    return "hello world"
  • 5.2.2从配置文件中加载app.config.from_pyfile(配置文件)

    #1.新建一个配置文件setting.py(或者setting.ini)里面写入DEBUG_BOOLE=True
    #2。在flask程序文件中
    app = Flask(__name__) app.config.from_pyfile('/xxxx/xx/xx/setting.py') # 里面写你上面配置文件的路径,如果在当前文件夹里创建的,就直接写setting.py,如果不是就写setting文件的路径 @app.route("/")
    def index():
    print(app.config['DEBUG_BOOLE'])
    return "hello world"
  • 5.2.3从环境变量中加载app.config.from_envvar(variable_name: str, silent: bool = False) Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息

    variable_name表示环境变量(一般是指在操作系统中用来指定操作系统运行环境的一些参数。通俗的讲:环境变量就是我们设置在操作系统中,由操作系统代为保存的变量值)

    silent表示系统环境变量中没有设置相应值时是否抛出异常(False 表示不安静的处理,没有值时报错通知,默认为False,True 表示安静的处理,即时没有值也让Flask正常的运行下去。)

  • 5.2.3-1.Linux系统中设置加入环境变量

    在Linux系统中设置和读取环境变量的方式如下:
    #设置:export 变量名=变量值 export ITNAME=python
    #读取:echo $变量名 echo $ITNAME
    Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为
    app.config.from_envvar('环境变量名')环境变量的值为配置文件的绝对路径
    先在终端中执行如下命令:export PROJECT_SETTING='~/setting.py'
    再运行如下代码 app = Flask(__name__) app.config.from_envvar('PROJECT_SETTING', silent=True) @app.route("/")
    def index():
    print(app.config['ITNAME'])
    return "hello world"
  • 5.2.3-2Pycharm运行时设置环境变量的方式



    app = Flask(__name__)
    
    app.config.from_envvar('SET')
    
    @app.route("/")
    def index():
    print(app.config['DEBUGBOOLE']) # DEBUGBOOLE是SET环境变量对应的配置文件里面的信息
    return "hello world"
  • 5.2.3-3项目中常用的方式

    使用工厂模式创建Flask app,并结合使用配置对象与环境变量加载配置

    使用配置对象加载默认配置

    使用环境变量加载不想出现在代码中的敏感配置信息

    # 工厂模式:
    # 1.定义工厂函数,封装创建程序实例的代码
    # 2.定义函数的参数,可以根据参数的不同,生成不同的app # 从环境变量中加载配置信息,一般是不适合对外公开的信息;
    def create_flask_app(config,enable_config_file=False):
    """
    创建Flask应用
    config:配置信息对象
    enable_config_file:是否允许运行环境中的配置文件覆盖已加载的配置信息
    :return: Flask应用
    """
    app = Flask(__name__)
    app.config.from_object(config)
    if enable_config_file:
    from common.utils import constants
    app.config.from_envvar("SET",silent=True)
    return app # 从配置对象中加载配置信息,一般是和业务相关的信息,比如数据库的连接信息等
    def create_app(config,enable_config_file=False):
    """
    创建应用
    config:配置对象信息
    enable_config_file:是否允许运行环境中的配置文件覆盖已加载的配置信息
    :return: app 应用
    """
    app = create_flask_app(config,enable_config_file)
    return app class DefaultConfig(object):
    """配置对象"""
    DEBUG_BOOLE=True
    # 调用工厂函数,传入配置参数,获取程序实例对象
    #app = create_app(DefaultConfig)
    app = create_app(DefaultConfig,enable_config_file=True)
    @app.route("/")
    def index():
    print(app.config['DEBUG_BOOLE'])
    return "hello world"

6.服务器启动方式

  • 在1.0版本之后,Flask调整了开发服务器的启动方式,由代码编写app.run()语句调整为命令flask run启动。即在开发服务器中不用在写

    if __name__ == '__main__':
    app.run(debug=True)
  • 终端启动

    export FLASK_APP= xxxx  # xxxx是你要创建要运行的文件名
    # 生产模式与开发模式的控制,通过FLASK_ENV环境变量指明
    # export FLASK_ENV=production 运行在生产模式,未指明则默认为此方式
    # export FLASK_ENV=development运行在开发模式
    flask run
    #flask run -h 服务器地址 -p 端口号
  • Pycharm启动

    ①开发阶段可以在运行的启动文件,最下面加上下面代码,直接右击运行这个文件就行

    if __name__=='__main__':
    app.run(debug=True)

    ②通过设置要运行文件的 Environment,设置如下图,设置好之后在直接右击运行这个文件就行

Flask初步认识的更多相关文章

  1. FLASK初步实践

    感觉经过DJANGO,CI,RAILS之类的WEB框架之后,FLASK的思路就比较顺畅了... FLASKR.PY import sqlite3 from flask import Flask, re ...

  2. 团队作业-Alpha(4/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...

  3. 团队作业-Alpha(3/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...

  4. 团队作业-Alpha(2/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:http://edu.cnblogs.com/campus/fzu/SoftwareEngineeri ...

  5. 第09组 Alpha冲刺(4/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...

  6. 第09组 Alpha冲刺(3/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...

  7. 第09组 Alpha冲刺(2/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:http://edu.cnblogs.com/campus/fzu/SoftwareEngineeri ...

  8. http协议详解之响应报文 3

    --------------响应示例--------------------------response#状态行HTTP/1.1 200 OK #协议及版本号.状态码.状态描述 #消息报头Date: ...

  9. Flask(3)- flask中的CBV、werkzeug+上下文初步解读、偏函数和线程安全

    一.flask中的CBV 对比django中的CBV,我们来看一下flask中的CBV怎么实现? from flask import Flask, render_template, url_for, ...

  10. Flask中的CBV和上下文初步解读

    一 . flask中的CBV 相对于Django中的CBV,让我们来看看flask中的CBV是如何实现的 ? from flask import Flask, render_template, url ...

随机推荐

  1. acwing349 黑暗城堡 (最短路径生成树)

    求出最短树,用乘法原理统计答案就行了(模拟prim过程). 不知道说什么了,直接上代码: 1 #include<cstring> 2 #include<iostream> 3 ...

  2. JuiceFS 元数据引擎选型指南

    文件系统是我们常见的存储形式,内部主要由数据和元数据两部分组成.其中数据是文件的具体内容,通常会直接展现给用户:而元数据是描述数据的数据,用来记录文件属性.目录结构.数据存储位置等.一般来说,元数据有 ...

  3. rowkey设计原则和方法

    rowkey设计首先应当遵循三大原则: 1.rowkey长度原则 rowkey是一个二进制码流,可以为任意字符串,最大长度为64kb,实际应用中一般为10-100bytes,它以byte[]形式保存, ...

  4. Qt Quick 用cmake怎么玩子项目

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/o-_aGqreuQda-ZmKktvxwA 以往在公司开发众多的项目中 ...

  5. 路由组件构建方案(分库分表)V1

    路由组件构建方案V1 实现效果:通过注解实现数据分散到不同库不同表的操作. 实现主要以下几部分: 数据源的配置和加载 数据源的动态切换 切点设置以及数据拦截 数据的插入 涉及的知识点: 分库分表相关概 ...

  6. 后端框架的学习----mybatis框架(6、日志)

    六.日志 如果一个数据库操作,出现了异常,我们需要排错,日志就是最好的帮手 setting设置 <settings> <setting name="logImpl" ...

  7. 2.httprunner-yaml用例结构

    前言: httprunner3.x版本弱化了api层的概念 直接在testcase中写request请求 如果是单个请求,也可以直接写成一个testcase 每个testcase必须具有两个类属性:c ...

  8. Linux三剑客awk

    Linux三剑客awk awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据格式化成专业的excel表的样式 awk早期在Unix上实现,我们用的awk是gawk,是GUN ...

  9. Oracle部署,关于日志文件系统选择(硬盘格式化、挂载)

    之前部署过好多Oracle服务,采用的日志文件系统一直是ext3.但是我观察到很多人在格式化/挂载数据盘时,采用的日志文件系统类型有ext3.ext4.xfs等,这不禁让我发出疑问,哪个类型的数据处理 ...

  10. C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)

    命名空间 概述 在C/C++中,变量.函数和后面要学到的类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲 ...