Flask框架(一):介绍与环境搭建

栏目: IT技术 · 发布时间: 4年前

内容简介:Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。

1.Flask介绍

Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。

Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),

都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。

其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。

2.Flask与Django对比

django提供了:django-admin快速创建项目工程目录、manage.py 管理项目工程、orm模型(数据库抽象层)、admin后台管理站点、缓存机制、文件存储系统、用户认证系统

flask都没有,都需要扩展包来提供

重量级的框架:为方便业务程序的开发,提供了丰富的 工具 、组件,如Django

轻量级的框架:只提供Web框架的核心功能,自由、灵活、高度定制,如Flask、Tornado

3.Flask常用的扩展包

  • 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:简单而可扩展的管理接口的框架

4.Flask文档

1、中文文档( http://docs.jinkan.org/docs/flask/

2、英文文档( http://flask.pocoo.org/docs/1.0/

5.Flask安装

pip install flask  # 可以先创建虚拟环境再进行安装

6.Flask程序编写

创建helloworld.py文件

# 导入Flask类
from flask import Flask

#Flask类接收一个参数__name__,Flask通过__name__找到程序所在的根目录
app = Flask(__name__)  #type:Flask

# 装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
    return 'Hello World'

# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
    app.run()

7.参数说明

Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块),接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数:

  • import_name
    • Flask程序所在的包(模块),传  __name__  就可以
    • 其可以决定 Flask 在访问静态文件时查找的路径
  • static_url_path
    • 静态文件访问路径,可以不传,默认为: / + static_folder
  • static_foldertemplate_folder
    • 静态文件存储的文件夹,可以不传,默认为  static
    • 模板文件存储的文件夹,可以不传,默认为  templates

默认参数情况下

app = Flask(__name__)

文件目录

----
  |---static
  |     |--- 1.png
  |---helloworld.py

访问  127.0.0.1:5000/static/1.png 就可以访问到图片

修改参数的情况下

app = Flask(__name__, static_url_path='/url_path_param', static_folder='folder_param')

文件目录

----
  |---folder_param     # 此处目录名变化
  |     |--- 1.png
  |---helloworld.py

访问 127.0.0.1:5000/url_path_param/1.png 才可以访问到图片

8.应用程序配置参数

主要使用以下三种方式:

  • 从配置对象中加载

    app.config.from_object(配置对象)
    
    class DefaultConfig(object):
        """默认配置"""
        SECRET_KEY = 'TPmi4aLWRbyVq8zu9v82dWYW1'
    
    app = Flask(__name__)
    
    app.config.from_object(DefaultConfig)
    
    @app.route("/")
    def index():
        print(app.config['SECRET_KEY'])
        return "hello world"
    

    应用场景:

    作为默认配置写在程序代码中

    可以继承

    class DevelopmentConfig(DefaultConfig):
        DEBUG=True
    
  • 从配置文件中加载

    app.config.from_pyfile(配置文件)
    

    新建一个配置文件setting.py

    SECRET_KEY = 'TPmi4aLWRbyVq8zu9v82dWYW1'
    

    在Flask程序文件中

    app = Flask(__name__)
    
    app.config.from_pyfile('setting.py')
    
    @app.route("/")
    def index():
        print(app.config['SECRET_KEY'])
        return "hello world"
    

    应用场景:

    在项目中使用固定的配置文件

  • 从环境变量中加载

    环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。

    通俗的理解,环境变量就是我们设置在操作系统中,由操作系统代为保存的变量值

    Linux 系统中设置和读取环境变量的方式如下:

    export 变量名=变量值  # 设置
    echo $变量名  # 读取
    
    # 例如
    export ITCAST=python
    echo $ITCAST
    

    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['SECRET_KEY'])
    return "hello world"

关于 silent 的说明:

表示系统环境变量中没有设置相应值时是否抛出异常

    • False 表示不安静的处理,没有值时报错通知,默认为False
    • True 表示安静的处理,即时没有值也让Flask正常的运行下去

项目中的常用方式

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

  • 使用配置对象加载默认配置
  • 使用环境变量加载不想出现在代码中的敏感配置信息
def create_flask_app(className):
    """
    创建Flask应用
    :param config: 配置对象
    :return: Flask应用
    """
    app = Flask(__name__)
    app.config.from_object(className)

    # 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
    app.config.from_envvar("PROJECT_SETTING", silent=True)
    return app

class DefaultConfig(object):
    """默认配置"""
    SECRET_KEY = 'itcast1'

class DevelopmentConfig(DefaultConfig):
    DEBUG=True

# app = create_flask_app(DefaultConfig)
app = create_flask_app(DevelopmentConfig)

@app.route("/")
def index():
    print(app.config['SECRET_KEY'])
    return "hello world"

app.run 参数

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

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

关于DEBUG调试模式

  1. 程序代码修改后可以自动重启服务器
  2. 在服务器出现相关错误的时候可以直接将错误信息返回到前端进行展示

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

无处安放的互联网隐私

无处安放的互联网隐私

【美】茱莉亚·霍维兹 【美】杰拉米·斯科 / 中国人民大学出版社有限公司 / 2017-7-1 / CNY 55.00

在当今互联网时代,我们的隐私权已经受到了威胁,政府或企业可以追踪我们的电话,搜索引擎可以记录我们的在线浏览记录以及恒温器的设置以及更多信息。在当代,保卫隐私权不只是简单地描述出存在的问题或者警告人们隐私权已经丧失,隐私权的护卫者们提出了解决策略。他们密切关注商业实践、公共政策和技术设计以及人物,应该继续下去吗?条件就是:有问题,让我们找到解决之道。一起来看看 《无处安放的互联网隐私》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具