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 第一的程序
代码语言:javascript复制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
@app.route('/hi')
@app.route('/hello')
def say():
return '<h1>hello</h1>'
- 动态URL:使用‘<变量名>’表示变量
@app.route('/greet/<name>')
def greet(name):
return '<h1>hello, %s!</h1>' % name
- URL中包含变量时,如果用户访问的URL中没有包含变量,则会返回错误,所以可以设置装饰器使用defaults参数设置变量的默认值
@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'
,也可以保存在文件中 - 多个设置:
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命令:
@app.cli.command()
def hello():
click.env('Hello , Human!')
然后在控制台输入:flask hello
1.9 模板和静态文件
- 项目结构示例:templates中存放html文件,static中存放css和js文件
hello/
- templates/
- static/
- app.py
1.10 Flask与MVC框架
- MVC框架最初是设计桌面程序的,在MVC框架中,程序被分成了三个组件:数据处理(Model),用户界面(View),交互逻辑(Controller)
- 严格来说Flask不是MVC架构的框架