Flask web开发学习笔记之初识Flask

  • Flask是使用python编写的Web微框架
  • Flask有两个主要依赖:
    • WSGI(Web Server Gateway Interface,Web服务器网关接口)
    • Jinja2模块引擎

1.1搭建开发环境

1.1.1 Pipenv工作流

  • 可看作是pip加强版,是pip和pipfile和virtualenv的结合体,使得包安装,包依赖管理和虚拟环境管理更加方便
  • python3.4及以上版本自带pip工具,使用 $ pip --version 查看已安装版本
  • 安装pipenv: $ pip install pipenv
  • 选择并进入工作目录,创建虚拟环境: $ pipenv install
  • 虚拟环境文件夹的目录名称的形式是’当前项目目录名+一串随机字符’
  • 显式激活虚拟环境: $ pipenv shell ,使用exit退出
  • 非显式激活虚拟环境: $ pipenv run python xxxx.py
  • 管理依赖(会使用到的python包),查看Pipfile和Pipfile.lock文件,或者输入$ pipenv graph或者在虚拟环境中输入 $ pip list

1.1.2 安装Flask

  • 在虚拟环境中安装Flask: $ pipenv install Flask

1.1.3 集成开发环境IDE

  • pycharm
  • 点击File → Setting → Project:XXX → Project Interpreter → Add local Python Interpreter → Virtualenv Environment → Existing environment → (输入 $ pipenv --venv 查看对应虚拟环境路径,找到其下的python.exe文件,linux/MacOS在bin,windows在Scripts)
  • 推荐使用浏览器 Firefox 和 Chorme

1.2 第一的程序

1
2
3
4
5
6
7
8
9
from flask import Flask //导入Flask类
app=Flask(__name__) //实例化这个类

@app.route('/') //注册路由
def index(): //视图函数
return '<h1>Hello World!</h1>'

if __name__ == "__main__":
app.run(debug=True)

1.2.1 创建程序实例

  • 导入Flask类,实例化这个类

1.2.2 注册路由

  • 为函数附加app.route()装饰器,并传入URL规则作参数
  • 可以为一个视图函数绑定多个URL
1
2
3
4
@app.route('/hi')
@app.route('/hello')
def say():
return '<h1>hello</h1>'
  • 动态URL:使用‘<变量名>’表示变量
1
2
3
@app.route('/greet/<name>')
def greet(name):
return '<h1>hello, %s!</h1>' % name
  • URL中包含变量时,如果用户访问的URL中没有包含变量,则会返回错误,所以可以设置装饰器使用defaults参数设置变量的默认值
1
2
3
4
5
6
7
8
9
10
@app.route('/greet',defaults={'name':'programmer'})
@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

1.3 启动开发服务器

1.3.1 运行

  • $ flask run
  • 自动发现程序实例:(Linux/macOS)$ export FlASK_APP=XXX或(Windows)set FlASK_APP=XXX,但是当我在Windows使用powershell时我输入set FLASK_APP=appname.py时,出错了,解决办法是输入$env:FLASK_APP="appname.py"
  • 管理环境变量: 安装python-dotenv,pip install python-dotenv,在项目根目录下创建两个文件:.env(存储敏感信息的环境变量)和.flaskenv(存储与flask相关公开环境变量),每行一个,以#为注释的键值对
  • 使用pycharm运行,需要配置一系列变量…..

1.3.2 更多启动选项

  • 设置主机地址:flask run --host=0.0.0.0
  • 设置端口: flask run --port=8000
  • 设置开发环境:可在.flaskenv文件中写入FALSK_ENV=development,在开发环境下,调试模式自动开启,通过FALSK_DEBUG控制是(=1)否(=0)开启.
  • 调试模式下,会激活调试器和重载器,调试器允许在错误页面输入PIN码调试,重载器可以检测文件变动,重启服务器。
  • 内置stat重载器性能一般,可以使用watchdog,pipenv install watchdog --dev,添加—dev的目的是声明为开发依赖。

1.4 shell

  • python shell与flask shell

1.5 Flask扩展

  • 即使用Flask提供的API接口编写的Python库

1.6 项目配置

  • 配置变量都是通过Flask对象的app.config属性作为统一的接口来设置和获取
  • 单个设置:app.cofig['ADMIN_NAME']='xiaoming',也可以保存在文件中
  • 多个设置:
1
2
3
4
app.config.update{
TESTING=True,
SECRET_KEY='XXXXXXXXXXX'
}
  • 获取:value=app.config['ADMIN_NAME']

1.7 URL与端点

  • 使用Flask提供的url_for()函数获取URL,第一个参数是端点名(默认是视图函数名),其后还可以加动态参数,形如:name=’Jack’,得到的URL是相对的URL(内部的URL)

1.8 Flask命令

  • flask run/flask shell/flask —help等等
  • 注册flask命令:
1
2
3
@app.cli.command()
def hello():
click.env('Hello , Human!')

然后在控制台输入:flask hello

1.9 模板和静态文件

  • 项目结构示例:templates中存放html文件,static中存放css和js文件
1
2
3
4
hello/
- templates/
- static/
- app.py

1.10 Flask与MVC框架

  • MVC框架最初是设计桌面程序的,在MVC框架中,程序被分成了三个组件:数据处理(Model),用户界面(View),交互逻辑(Controller)
  • 严格来说Flask不是MVC架构的框架