1_初识Flask

准备工作

1.安装pip和pipenv

pip --version (查看pip版本,一般安装python自带)
pip install <某个包的名称>
​
pip install pipenv

2.创建虚拟环境

pipenv install (创建虚拟环境)
pipenv shell   (显式激活虚拟环境)
​
pipenv run python hello.py (不显式执行命令)

3.管理依赖

在创建虚拟环境时,如果项目根目录下没有Pipfile文件,pipenv install命令会在项目文件夹下创建Pipfile(记录项目依赖包列表)和Pipfile.lock(固定版本的详细依赖包列表)文件

当需要在一个新的环境运行程序时,只需要执行pipenv install命令。Pipenv就会创建一个新的虚拟环境,然后自动从Pipfile中读取依赖并安装到新创建的虚拟环境中。

4.安装flask

pipenv install flask (下载)
pipenv update flask  (更新)

同时被安装的还有五个依赖包:


Hello, Flask

1.最小的flask程序

app.py:

from flask import Flask
app = Flask(__name__)    # 创建程序实例,实例化Flask类,__name__对于app.py来说值为app
​
@app.route('/') # 装饰器,注册路由,绑定根地址/和index()函数
def index():    # 视图函数
    return '<h1>Hello Flask!</h1>'</pre>

对于简单的程序来说,程序的主模块一般命名为app.py。你也可以使用其他名称,比如hello.py,但是要避免使用flask.py,因为这和Flask本身冲突。

1.一个视图函数可以绑定多个URL

@app.route('/hi')
@app.route('/hello')
def say_hello():
    return '<h1>Hello, Flask!</h1>'

2.动态URL

@app.route('/greet/<name>')
def greet(name):
    return '<h1>Hello, %s!</h1>' % name

@app.route('/greet')
@app.route('/greet/<name>')
def greet(name='Programmer'):  # 默认
    return '<h1>Hello, %s!</h1>' % name</pre>

2.启动开发服务器

Flask内置简单开发服务器(由依赖包Werkzeug提供)

通过依赖包Click,当安装Flask后自动添加一个flask命令脚本

其中,flask run 命令用来启动内置的开发服务器,可以执行 flask --help 查看所有可用的命令

http://127.0.0.1即localhost,是指向本地机的IP地址,一般用来测试。Flask默认使用5000端口,对于上面的地址,你也可以使用http://localhost:5000/

flask run 是如何找到程序实例的?

自动探测存在下面规则:

1.从当前目录寻找app.py和wsgi.py模块,并从中寻找名为app或application的程序实例

2.从环境变量FLASK_APP对应的模块名/导入路径寻找名为app或application的程序实例

$ export FLASK_APP = hello  # Linux macOS
​
> set FLASK_APP = hello     # windows</pre>

3.如果安装了 python-dotenv 自动从 .flaskenv 文件和 .env 文件中加载环境变量,优先级:<u style="box-sizing: border-box;">手动设置的环境变量 > .env中设置的环境变量 > .flaskenv设置的环境变量</u>

pipenv install python-dotenv
​
SOME_VAR=1
FOO="BAR"
# .flaskenv和.env文件中环境变量用键值对形式定义,每行一个,#开头的是注释

.flaskenv 用来存储和Flask相关的公开环境变量,比如FLASK_APP
.env 用来存储包含敏感信息的环境变量(服务器账户名密码),绝不能提交到git仓库中,.gitignore

3.更多的启动选项

flask run --host=0.0.0.0 # 使服务器外部可见
flask run --port=8000    # 改变默认端口5000

可以通过环境变量设置:

FLASK_RUN_HOST = 0.0.0.0
FLASK_RUN_PORT = 8000

4.设置运行环境

开发环境是指我们在本地编写和测试程序时的计算机环境,而生产环境与开发环境相对,它指的是网站部署上线供用户访问时的服务器环境。默认为production(生产)。

开发环境(development environment)和生产环境(production environment)
​
FLASK_ENV = development # 改变环境变量,将运行环境设置为开发环境

开发环境下会激活Werkzeug内置的调试器(debugger)和重载器(reloader):

  1. 调试器

    当程序出错时,我们可以在网页上看到详细的错误追踪信息

  2. 重载器

    监测文件变动,然后重新启动开发服务器

5.flask shell

使用flask shell命令打开的Python Shell自动包含程序上下文,并且已经导入了app实例:

>>> app
<Flask 'app'>
>>> app.name
 'app'

6.Flask扩展

扩展(extension)即使用Flask提供的API接口编写的Python库,可以为Flask程序添加各种各样的功能。在编写程序时,应该尽量从实际需求出发,只在需要的时候使用扩展,并把扩展的质量和兼容性作为考虑因素,尽量在效率和灵活性之间达到平衡。

from flask import Flask
from flask_foo import Foo
​
app = Flask(__name__)
foo = Foo(app) </pre>

7.项目配置

在Flask中,配置变量就是一些大写形式的Python变量,你也可以称之为配置参数或配置键。和平时使用变量不同,这些配置变量都通过Flask对象的app.config属性作为统一的接口来设置和获取,它指向的Config类实际上是字典的子类,所以你可以像操作其他字典一样操作它

app.config['ADMIN_NAME'] = 'Peter'
​
app.config.update(
    TESTING = True,
    SECRET_KEY = '_5#yF4Q8z\n\xec]/'
)
​
value = app.config['ADMIN_NAME']

某些扩展需要读取配置值来完成初始化操作,因此我们应该尽量将加载配置的操作提前,最好在程序实例app创建后就加载配置。

8.URL与断点

@app.route('/')
def index():
    return 'Hello Flask!'     # 这个路由的端点即视图函数的名称index
                              # 调用url_for('index')可以获取到对应的URL,'/'

@app.route('/hello/<name>')
def greet(name):
    return 'Hello %s!' % name # url_for('greet',name='cad'),得到'/hello/cad'

9.Flask命令

flask run

flask <命令名>

@app.cli.command()             # 装饰器,自定义命令,传入参数('say-hello')修改命令名
def hello():                   # 函数的名称即命令名称,用flask hello命令来触发函数
    """Just say hello."""      # 帮助信息显示 flask hello --help
    click.echo('Hello, Human!')# echo()函数,在命令行界面输出字符

10.模板与静态文件

模板(template)即包含程序页面的HTML文件,静态文件(static file)则是需要在HTML文件中加载的CSS和JavaScript文件,以及图片、字体文件等资源文件。

hello/
   - templates/
   - static/
   - app.py

11.Flask与MVC架构

MVC Flask
数据处理(Model) SQLAlchemy创建数据库模型
用户界面(View) Jinja2渲染的HTML模板
交互逻辑(Controller) 视图函数
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容