一、介绍

  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. jmeter接口之json提取器应用

    在接口测试中有一个这样的场景:业务接口需要用到登录token:下个接口需要用到前个接口返回值作为参数,该怎么实现? 首先先看下登录.业务接口,本文用的jmeter版本为5.4.1 一.json提取器设 ...

  2. win10系统每次重启桌面图标排列都会改动怎么办

    鼠标右键点击个性化>主题>找到桌面图标设置>把计算机 回收站 用户的文件 控制面板 网络等前面框复选框全部勾选掉,然后在桌面新建文件夹把桌面所有的图标剪切到新建文件里面,然后把新建文 ...

  3. 下载安装sqlyog

    sqlyog下载地址: https://github.com/webyog/sqlyog-community/wiki/Downloads 下载社区版,然后傻瓜式安装

  4. 记:java.lang.IllegalArgumentException: DAY_OF_MONTH 报错

    查询的时候报错: 月份中的天数错误 原因:  date日期列中有数据错误 修改数据库中错误的数据就可以了.

  5. uniapp自定义组件的使用--记录

    在 pages.json同级目录下 创建目录和文件: components: videoComp: VideoPlaySelf.vue VideoPlaySelf.vue 内容 <templat ...

  6. java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'

    你设置的主键里面已经有一个值为1的数值了,再插入一个就重复了. 但是主键是不能重复的.

  7. 正确处理iOS从下方滑出滚动视图

    本文提供 Demo下载 在iOS 11开始,从最早的地图应用到最近的捷径,陆续有系统应用使用从下方滑出列表的形式,这种系统提供的圆角风格视图用手势划出和隐藏时非常自然流畅.国内的一些应用也跟进了这种交 ...

  8. Enhancement S_ALR_87011964 Asset Balance Report to add custom column

    Enhancement S_ALR_87011964 Asset Balance Report to add custom column - SAP Tutorial Include own fiel ...

  9. JAVA学习笔记-09

    多线程: 进程:就是正在执行中的程序,每一个进程执行都有一个执行的顺序,该顺序是一个执行路径.或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元,线程在控制着进程的执行 一个进程中至少有一个线 ...

  10. 查看linux 用户

    sudo cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1}' ...