一、介绍

  flask只有一个内核,其WSGI工具箱采用Werkzeug(路由模块),模板引擎使用Jinja2。其他几乎所有功能都要用第三方扩展来实现。

二、常用扩展包

  扩展列表:http://flask.pocoo.org/extensions/

  • Flask-SQLalchemy:操作数据库;
  • Flask-script:插入脚本;
  • Flask-migrate:管理迁移数据库;
  • Flask-Session:Session存储方式指定;
  • Flask-WTF:表单;
  • Flask-Mail:邮件;
  • Flask-Bable:提供国际化和本地化支持,翻译;
  • Flask-Login:认证用户状态;
  • Flask-OpenID:认证;
  • Flask-RESTful:开发REST API的工具;
  • Flask-Bootstrap:集成前端Twitter Bootstrap框架;
  • Flask-Moment:本地化日期和时间;
  • Flask-Admin:简单而可扩展的管理接口的框架

  中文文档网址:(http://docs.jinkan.org/docs/flask/

三、环境安装

  1、安装虚拟环境和pip的命令(需要联网)

    # 虚拟环境

    mkvirtualenv  # 创建虚拟环境

    rmvirtualenv  # 删除虚拟环境

    workon  # 进入虚拟环境、查看所有虚拟环境

    deactivate  # 退出虚拟环境

    # pip

    pip install  # 安装依赖包

    pip uninstall  # 卸载依赖包

    pip list  # 查看已安装的依赖包

    pip freeze  # 冻结当前环境的依赖包

    # 自己需要备的步骤

    mkvirtualenv flask -p python3  # 安装flask

    pip install flask  # 安装flask

四、创建第一个最简单的Flask程序

# 创建一个helloworld.py模块
# 导入Flask类
from flask import Flask # Flask类接收一个参数__name__,表示以此模块所在的包为程序主入口
app = Flask(__name__) # 装饰器的作用是将指定路由映射到视图函数index
@app.route("/")
def index():
return "Hello World" # Flask应用程序实例的run方法启动WEB服务器
if __name__ == "__main__":
app.run()

  手动启动命令:python helloworld.py,pycharm和正常运行普通python程序一样即可。

五、Flask对象初始化参数

  import_name  传 __name__ 即可,决定 Flask 在访问静态文件时查找的路径。

  static_url_path  静态文件访问路径,可以不传,默认为: / + static_folder

  static_folder  静态文件存储的文件夹,可以不传,默认为 static

# 修改参数的情况下
app = Flask(__name__, static_url_path="/url_path", static_folder="folder_param") # 文件目录
----
|---folder_param # 此处目录名变化
| |--- 1.png # static下存储的图片
|---helloworld.py # 主程序入口

  通过访问 127.0.0.1:5000/url_path/1.png 才能访问到图片

六、应用程序配置参数  

 1、对于Flask对象初始化参数仅仅设置的是Flask本身的属性,比如:

  • Flask从哪里读取静态文件
  • Flask从哪里读取模板文件
  • ...等等。

 2、应用程序配置参数设置的是一个Web应用工程的相关信息,比如:

  • 数据库的连接信息
  • 日志的配置信息
  • 自定义的配置信息
  • ...等等

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

 3、读取

   app.config.get(name)

   app.config[name]

 4、设置,主要使用三种方式:

  ①从配置对象(设置一个类,将配置信息写进去)中加载,用 app.config.from_object(配置对象) 加载,好处:可以继承,但是信息不安全

  ②从配置文件(将配置信息写入到一个单独的setting.py文件)中加载,用 app.config.from_pyfile(配置文件的路径)

  ③从环境变量中加载,Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,用 app.config.from_envvar("环境变量名", silent=True) # 环境变量名是配置文件的绝对路径,silent是boolean值,默认为False表示没值时报错,设置为True表示没值时也让运行下去。

    在 linux中命令设置环境变量

      export 变量名=变量值  # 设置

      echo $变量名  # 赢取

    在windows中命令设置环境变量

      set 变量名=变量值  # 设置

      echo %变量名%  # 读取

  ④Pycharm运行时设置环境变量,如下图:

    

    

  ⑤项目中推荐:先使用配置对象加载默认配置,后使用环境加载不想出现在代码中的敏感配置信息,两个搭配使用。如下

from flask import Flask

def create_flask_app(config):
"""
创建Flask作用
:param: config: 配置对象
:return: Flask应用
"""
app = Flask(__name__)
app.config.from_object(config)
# 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
app.config.from_envvar("环境变量名", silent=True)
return app class DefaultConfig(object):
# 默认配置
SECRET_KEY = "learn" class DevelopmentConfig(DefaultConfig):
DEBUG = True app = create_flask_app(DevelopmentConfig) @app.route("/")
def index():
app.config.get("SECRET_KEY ")
return "helloworld" if __name__ == "__main__":
app.run() # 运行程序后会显示 learn

  5、app.run参数

    可以指定运行的主机IP地址,端口,是否开启调试模式

    app.run(host="0.0.0.0", port=5000, debug=True)

  6、DEBUG模式开启的作用

    ①程序代码修改后可以自动重启服务器

    ②在服务器出现相关错误的时候可以直接将错误信息返回到前端进行展示

七、开发服务器启动方式

  在1.0后期的版本中,调整了启动方式,由代码编写 app.run() 语句调整为命令 flask run启动,程序中不用在写app.run()

  1、终端启动

    ①在linux中:    

      export FLASK_APP=要运行的模块名

    ②在windows中:

      set FLASK_APP=要运行的模块名

    ③flask run -h 0.0.0.0 -p 8000 # 可以指定主机IP和端口运行程序

    ④生产者与开发者的控制

      linux中:

        export FLASK_ENV=production  # 运行在生成模式(默认模式)

        export FLASK_ENV=development  # 运行在开发调试模式

      windows中:        

        set FLASK_ENV=production  # 运行在生成模式(默认模式)

        set FLASK_ENV=development  # 运行在开发调试模式

八、在Pycharm启动

  设置环境变量

  

  

  

  旧版本Pycharm设置

  

九、路由

  1、查询路由

   ①命令行方式: flask routes

   ②在程序中获取: print(app.url_map)

# 通过访问 / 地址,以json的方式返回应用内的所有路由信息

@app.route("/")
def route_map():
"""
主视图,返回所有视图网址
"""
rules_iterator = app.url_map.iter_rules()
return json.dumps({rule.endpoint:rule.rule for rule in rules_iterator})

  2、请求指定方式

    在Flask中,请求方式默认为GET、OPTIONS、HEAD三种方式,利用 methods 自定义接口的请求方式:

@app.route("/learn", methods=["GET","POST"])
def view_func():
return "hello_world"

十、蓝图

  在Flask中,使用蓝图Blueprint来分模块组织管理。

  1、使用蓝图可以分为三个步骤    

# 创建一个蓝图对象
user_bp = Blueprint("user", __name__) # 在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册横版过滤器
@user_bp.route("/")
def user_profile():
return "user_profile" # 在应用对象上注册这个蓝图对象
app.register_blueprint(user_bp)

  2、单文件蓝图

    可以将创建蓝图对象与定义视图放到一个文件中

  3、目录(包)蓝图

    对于一个打算包含多个文件的蓝图,通常将创建蓝图对象放到Python包的__init__.py文件中,如下图

    

  3、扩展用法

    ①指定蓝图的 url 前缀

      在应用中注册蓝图时使用 url_prefix 参数指定

      app.register_blueprint(user_bp, url_prefix="/user")

      app.register_blueprint(goods_bp, url_prefix="/goods")

    ②蓝图内部静态文件。蓝图没有默认静态目录,需要我们在创建时指定static_folder参数,如:

      admin = Blueprint("admin", __name__, static_folder="static_admin")

      app.register_blueprint(admin, url_prefix="/admin")

      上面定义后,使用 /admin/static_admin/<filename> 访问 static_admin 目录下的静态文件了。

   4、蓝图内部模板目录

    蓝图对象默认的模板目录为系统的模版目录,可以在创建蓝图对象时使用 template_folder 关键字参数设置模版目录,如下

    admin = Blueprint("user", __name__, static_folder="my_statics", template_folder="my_templates")

flask-基础篇01的更多相关文章

  1. iOS系列 基础篇 01 构建HelloWorld,剖析并真机测试

    iOS基础 01 构建HelloWorld,剖析并真机测试 前言: 从控制台输出HelloWorld是我们学习各种语言的第一步,也是我们人生中非常重要的一步. 多年之后,我希望我们仍能怀有学习上进的心 ...

  2. 第一篇 Flask基础篇之(配置文件,路由系统,模板,请求响应,session&cookie)

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

  3. 第二篇 Flask基础篇之(闪现,蓝图,请求扩展,中间件)

    本篇主要内容: 闪现 请求扩展 中间件 蓝图 写装饰器,常用 functools模块,帮助设置函数的元信息 import functools def wrapper(func): @functools ...

  4. Java多线程系列 基础篇01 线程的状态

    1.进程和线程 进程: 计算机中程序关于某数据集合的一次运行活动,是计算机系统进行资源分配和调度的基本单位,是操作系统结构的基础. 线程: 线程是进程的实例,是CPU进行资源分配和调度的最小单位,线程 ...

  5. 【matlab 基础篇 01】快速开始第一个程序(详细图文+文末资源)

    快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 文章目录 1 软件安装 2 打开软件 3 编写程序 3.1 基础步骤 3.2 添加PATH 3.3 命令行模式 4 ...

  6. Java多线程系列--“基础篇”01之 基本概念

    多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait( ...

  7. Java岗 面试考点精讲(基础篇01期)

    即将到来金三银四人才招聘的高峰期,渴望跳槽的朋友肯定跟我一样四处找以往的面试题,但又感觉找的又不完整,在这里我将把我所见到的题目做一总结,并尽力将答案术语化.标准化.预祝大家面试顺利. 术语会让你的面 ...

  8. python 基础篇01

    一.python介绍年的圣诞节期间,吉多亿个文件的上传和下载千万张照片被分享,全部用倍年,为了打发圣诞节假期,年,第一个Python编译器诞生.它是用C语言实现的,并能够调用C语言的库文件.从一出生, ...

  9. python框架之Flask基础篇(一)

    一.第一个hello world程序 # coding=utf-8 from flask import Flask app = Flask(__name__) @app.route('/') def ...

  10. python框架之Flask基础篇(四)-------- 其他操作

    1.蓝图 要用蓝图管理项目,需要导入的包是:from flask import Buleprint 具体大致分为三步: 1.先在子模块中导入蓝图包,然后再创建蓝图对象. 2.然后将子模块中的视图函数存 ...

随机推荐

  1. ssh登录、scp传送文件

    一.ssh 1.远程登陆服务器 ssh user@hostname user: 用户名hostname: IP地址或域名 第一次登录时会提示:The authenticity of host '123 ...

  2. REPLACE,TRANSLATE

    REPLACE 1.语法 replace(string,from_str,to_str) 2.说明: 针对string,将from_str中的字符替换为to_str中字符. 3.示例: /**说明:( ...

  3. Java面向对象编程导论

    面向对象编程简介 JAVA是一门面向对象的编程语言.面向对象编程范式与面向过程编程范式同属于命令式编程范式,与函数式编程范式相区别.在面向对象编程范式中,我们将我们要处理的系统的业务逻辑表现为对象之间 ...

  4. vue获取标签对象的方式

    我知道2种方式: 1.在标签内 使用 ref 属性定义对象名,使用this.$refs.[name] 调用 2.在标签内 使用 函数传递事件对象, 定义, <div @click="h ...

  5. Android学习——控件EditText

    1.主要属性

  6. Python 安装使用cx_Oracle操作Oracle数据库

    cx_Oracle 是一个能够访问 Oracle 数据库的 Python 扩展模块.它符合 Python 数据库 API 2.0 规范,并增加了相当多的内容和几个排除项.Python 连接使用Orac ...

  7. cgroup和Linux Namespace基础操作

    一.开头 接触过docker的同学多多少少听过这样一句话"docker容器通过linux namespace.cgroup特性实现资源的隔离与限制".今天我们来尝试学习一下这两个东 ...

  8. 20230225 TI Electromagnetic compatibility testing methods and standards

    Hello, and welcome to the TI Precision Labs video, Introducing Electromagnetic Compliance Standard T ...

  9. springboot 集成poi导出word(一)

    使用ruoyi-前后端分离版本,根据word模板导出,包含表格和图片. 一.创建模板 列表使用{{}},文本使用[] 二.引入依赖 <!-- excel工具 --> <depende ...

  10. 在集群上运行Spark应用

    初识Spark真的存在很多疑问:Spark需要部署在集群里的每个节点上吗?Spark怎么有这么多依赖,这些依赖分别又有什么用?官网里边demo是用sbt构建的,难道还有再学一下sbt吗? --就是这么 ...