Flask 成长之路(三)---- 工程布局和应用安装

上一节我们简单的创建了一个 Flask 应用,从宏观上里看到了 Flask 提供的功能的诸多方面,包括 Debug ,路由,静态文件,渲染模板,Request ,Response 对象,Cookies ,Sessions 对象,打印日志,错误和重定向等等。接下来就每个具体问题详细学习。

工程布局

首先为这个工程创建文件夹 flasklearn 并进入文件夹,参照之前的方法创建 python 虚拟环境激活后在虚拟环境中安装 flask

这样就创建了一个虚拟环境 venv,他的目录结构是这样的,flasklearn 文件夹里面创建了名称为 venv 的虚拟环境文件夹,venv 里面包含了虚拟环境依赖的各种库和脚本文件,我们就通过存放脚本的文件夹 Scripts 里面的 activate 文件(作用就是用来激活当前虚拟环境)来激活创建的这个虚拟环境,准备工作做好了,最后在虚拟环境中为我们的工程安装 flask 。

当我们的工程变得非常大的时候,一个文件就会变得很庞大。python 工程利用包把代码组织成多个模块,需要的时候就导入相应的模块。

这个工程目录包括:

  • flaskr/,他是一个包含了应用的代码和文件的 Python 包。
  • tests/,他是一个包含了测试模块的目录。
  • venv/,Python 虚拟环境,里面安装了 Flask 以及其他的一些依赖。
  • 安装文件告诉 python 怎么安装你的工程。
  • 版本控制,比如 Git 。
  • 未来你可能添加的其他工程。

最后,工程布局看起来像下面这样:

/home/user/Projects/flasklearn
├── flaskr/
│   ├── __init__.py
│   ├── db.py
│   ├── schema.sql
│   ├── auth.py
│   ├── blog.py
│   ├── templates/
│   │   ├── base.html
│   │   ├── auth/
│   │   │   ├── login.html
│   │   │   └── register.html
│   │   └── blog/
│   │       ├── create.html
│   │       ├── index.html
│   │       └── update.html
│   └── static/
│       └── style.css
├── tests/
│   ├── conftest.py
│   ├── data.sql
│   ├── test_factory.py
│   ├── test_db.py
│   ├── test_auth.py
│   └── test_blog.py
├── venv/
├── setup.py
└── MANIFEST.in

应用安装

一个 Flask 应用就是一个 Flask 类的实例。所有关于这个应用的如配置和 URLs,都会随着这个类注册。

创建一个 Flask 应用最直接的方法就是在代码的开头创建一个全局的 Flask 实例,就像之前的 "Hello ,World"那样,但是项目很大的时候就会出现许多不可预知的问题。因此取而代之的是,在函数里面创建 Flask 实例,这个函数叫做 application factory,任何配置,注册以及其他这个应用的安装都会在这个函数里面发生,然后,这个应用会返回。

下面就看一下这个 application factory

创建 flaskr 目录然后添加 __init__.py 文件。这个 __init__.py 有2个作用:一是包含 application factory,另外就是表明 flaskr 是一个 python 包。

mkdir flaskr

flaskr/__init__.py

import os

from flask import Flask

def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='dev',
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # a simple page that says hello
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    return app

create_app 就是 application factory 函数,他做了几件事。

  • app = Flask(__name__,instance_relative_config=True) 创建 Flask 实例

             __name__ 是当前 Python 模块的名称,这个 APP 需要知道他的位置来安装一些路径。

             instance_relative_config=True 告诉 app 配置文件,实例文件在 flaskr 包的外部,能够保存不应该传送到版本控制的局                    部数据,比如配置隐私和数据库文件。

  • app.config.from_mapping() 设置了一些 app 将会用到的默认配置

          SECRET_KEY  主要用来保证数据安全,他设置为 'dev' 在开发的时候提供了一个合适的值,但是在应用的时候应该被重               写为一个随机值。

           DATABASE 是 SQLite 数据库文件将会被保存的路经,他在 app.instance_path 之下,这是 Flask 为实例文件夹选择的路径

  • app.config.from_pyfile() 用实力文件夹中  config.py 文件的值重写默认配置

            Test_config 也可以传到这个 factor,会被用来代替实例配置。

  • os.makedirs() 保证 app.instance_path 的存在,Flask 不会自动穿件这个实例文件,但是他需要被创建因为你的工程将会在这里创建 SQLite 数据库文件。
  • @app.route() 创建一个简单的路径。他创建了一个 URL /hello 和返回一个 response 的函数之间的连接。

运行应用

接下来就可以告诉终端你的应用的位置,然后用 flask 命令以 development 的模式运行应用。

在浏览器的 5000 端口就可以看到效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值