flask-基础篇01
一、介绍
flask只有一个内核,其WSGI工具箱采用Werkzeug(路由模块),模板引擎使用Jinja2。其他几乎所有功能都要用第三方扩展来实现。
二、常用扩展包
扩展列表:http://flask.pocoo.org/extensions/
- 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:简单而可扩展的管理接口的框架
中文文档网址:(http://docs.jinkan.org/docs/flask/)
三、环境安装
1、安装虚拟环境和pip的命令(需要联网)
# 虚拟环境
mkvirtualenv # 创建虚拟环境
rmvirtualenv # 删除虚拟环境
workon # 进入虚拟环境、查看所有虚拟环境
deactivate # 退出虚拟环境
# pip
pip install # 安装依赖包
pip uninstall # 卸载依赖包
pip list # 查看已安装的依赖包
pip freeze # 冻结当前环境的依赖包
# 自己需要备的步骤
mkvirtualenv flask -p python3 # 安装flask
pip install flask # 安装flask
四、创建第一个最简单的Flask程序
# 创建一个helloworld.py模块
# 导入Flask类
from flask import Flask # Flask类接收一个参数__name__,表示以此模块所在的包为程序主入口
app = Flask(__name__) # 装饰器的作用是将指定路由映射到视图函数index
@app.route("/")
def index():
return "Hello World" # Flask应用程序实例的run方法启动WEB服务器
if __name__ == "__main__":
app.run()
手动启动命令:python helloworld.py,pycharm和正常运行普通python程序一样即可。
五、Flask对象初始化参数
import_name 传 __name__ 即可,决定 Flask 在访问静态文件时查找的路径。
static_url_path 静态文件访问路径,可以不传,默认为: / + static_folder
static_folder 静态文件存储的文件夹,可以不传,默认为 static
# 修改参数的情况下
app = Flask(__name__, static_url_path="/url_path", static_folder="folder_param") # 文件目录
----
|---folder_param # 此处目录名变化
| |--- 1.png # static下存储的图片
|---helloworld.py # 主程序入口
通过访问 127.0.0.1:5000/url_path/1.png 才能访问到图片
六、应用程序配置参数
1、对于Flask对象初始化参数仅仅设置的是Flask本身的属性,比如:
- Flask从哪里读取静态文件
- Flask从哪里读取模板文件
- ...等等。
2、应用程序配置参数设置的是一个Web应用工程的相关信息,比如:
- 数据库的连接信息
- 日志的配置信息
- 自定义的配置信息
- ...等等
Flask将配置信息保存到了 app.config 属性中,该属性可以按照字典类型进行操作。
3、读取
app.config.get(name)
app.config[name]
4、设置,主要使用三种方式:
①从配置对象(设置一个类,将配置信息写进去)中加载,用 app.config.from_object(配置对象) 加载,好处:可以继承,但是信息不安全
②从配置文件(将配置信息写入到一个单独的setting.py文件)中加载,用 app.config.from_pyfile(配置文件的路径)
③从环境变量中加载,Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,用 app.config.from_envvar("环境变量名", silent=True) # 环境变量名是配置文件的绝对路径,silent是boolean值,默认为False表示没值时报错,设置为True表示没值时也让运行下去。
在 linux中命令设置环境变量
export 变量名=变量值 # 设置
echo $变量名 # 赢取
在windows中命令设置环境变量
set 变量名=变量值 # 设置
echo %变量名% # 读取
④Pycharm运行时设置环境变量,如下图:
⑤项目中推荐:先使用配置对象加载默认配置,后使用环境加载不想出现在代码中的敏感配置信息,两个搭配使用。如下
from flask import Flask def create_flask_app(config):
"""
创建Flask作用
:param: config: 配置对象
:return: Flask应用
"""
app = Flask(__name__)
app.config.from_object(config)
# 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
app.config.from_envvar("环境变量名", silent=True)
return app class DefaultConfig(object):
# 默认配置
SECRET_KEY = "learn" class DevelopmentConfig(DefaultConfig):
DEBUG = True app = create_flask_app(DevelopmentConfig) @app.route("/")
def index():
app.config.get("SECRET_KEY ")
return "helloworld" if __name__ == "__main__":
app.run() # 运行程序后会显示 learn
5、app.run参数
可以指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=5000, debug=True)
6、DEBUG模式开启的作用
①程序代码修改后可以自动重启服务器
②在服务器出现相关错误的时候可以直接将错误信息返回到前端进行展示
七、开发服务器启动方式
在1.0后期的版本中,调整了启动方式,由代码编写 app.run() 语句调整为命令 flask run启动,程序中不用在写app.run()
1、终端启动
①在linux中:
export FLASK_APP=要运行的模块名
②在windows中:
set FLASK_APP=要运行的模块名
③flask run -h 0.0.0.0 -p 8000 # 可以指定主机IP和端口运行程序
④生产者与开发者的控制
linux中:
export FLASK_ENV=production # 运行在生成模式(默认模式)
export FLASK_ENV=development # 运行在开发调试模式
windows中:
set FLASK_ENV=production # 运行在生成模式(默认模式)
set FLASK_ENV=development # 运行在开发调试模式
八、在Pycharm启动
设置环境变量
旧版本Pycharm设置
九、路由
1、查询路由
①命令行方式: flask routes
②在程序中获取: print(app.url_map)
# 通过访问 / 地址,以json的方式返回应用内的所有路由信息 @app.route("/")
def route_map():
"""
主视图,返回所有视图网址
"""
rules_iterator = app.url_map.iter_rules()
return json.dumps({rule.endpoint:rule.rule for rule in rules_iterator})
2、请求指定方式
在Flask中,请求方式默认为GET、OPTIONS、HEAD三种方式,利用 methods 自定义接口的请求方式:
@app.route("/learn", methods=["GET","POST"])
def view_func():
return "hello_world"
十、蓝图
在Flask中,使用蓝图Blueprint来分模块组织管理。
1、使用蓝图可以分为三个步骤
# 创建一个蓝图对象
user_bp = Blueprint("user", __name__) # 在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册横版过滤器
@user_bp.route("/")
def user_profile():
return "user_profile" # 在应用对象上注册这个蓝图对象
app.register_blueprint(user_bp)
2、单文件蓝图
可以将创建蓝图对象与定义视图放到一个文件中
3、目录(包)蓝图
对于一个打算包含多个文件的蓝图,通常将创建蓝图对象放到Python包的__init__.py
文件中,如下图
3、扩展用法
①指定蓝图的 url 前缀
在应用中注册蓝图时使用 url_prefix 参数指定
app.register_blueprint(user_bp, url_prefix="/user")
app.register_blueprint(goods_bp, url_prefix="/goods")
②蓝图内部静态文件。蓝图没有默认静态目录,需要我们在创建时指定static_folder参数,如:
admin = Blueprint("admin", __name__, static_folder="static_admin")
app.register_blueprint(admin, url_prefix="/admin")
上面定义后,使用 /admin/static_admin/<filename> 访问 static_admin 目录下的静态文件了。
4、蓝图内部模板目录
蓝图对象默认的模板目录为系统的模版目录,可以在创建蓝图对象时使用 template_folder 关键字参数设置模版目录,如下
admin = Blueprint("user", __name__, static_folder="my_statics", template_folder="my_templates")
flask-基础篇01的更多相关文章
- iOS系列 基础篇 01 构建HelloWorld,剖析并真机测试
iOS基础 01 构建HelloWorld,剖析并真机测试 前言: 从控制台输出HelloWorld是我们学习各种语言的第一步,也是我们人生中非常重要的一步. 多年之后,我希望我们仍能怀有学习上进的心 ...
- 第一篇 Flask基础篇之(配置文件,路由系统,模板,请求响应,session&cookie)
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- 第二篇 Flask基础篇之(闪现,蓝图,请求扩展,中间件)
本篇主要内容: 闪现 请求扩展 中间件 蓝图 写装饰器,常用 functools模块,帮助设置函数的元信息 import functools def wrapper(func): @functools ...
- Java多线程系列 基础篇01 线程的状态
1.进程和线程 进程: 计算机中程序关于某数据集合的一次运行活动,是计算机系统进行资源分配和调度的基本单位,是操作系统结构的基础. 线程: 线程是进程的实例,是CPU进行资源分配和调度的最小单位,线程 ...
- 【matlab 基础篇 01】快速开始第一个程序(详细图文+文末资源)
快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 文章目录 1 软件安装 2 打开软件 3 编写程序 3.1 基础步骤 3.2 添加PATH 3.3 命令行模式 4 ...
- Java多线程系列--“基础篇”01之 基本概念
多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait( ...
- Java岗 面试考点精讲(基础篇01期)
即将到来金三银四人才招聘的高峰期,渴望跳槽的朋友肯定跟我一样四处找以往的面试题,但又感觉找的又不完整,在这里我将把我所见到的题目做一总结,并尽力将答案术语化.标准化.预祝大家面试顺利. 术语会让你的面 ...
- python 基础篇01
一.python介绍年的圣诞节期间,吉多亿个文件的上传和下载千万张照片被分享,全部用倍年,为了打发圣诞节假期,年,第一个Python编译器诞生.它是用C语言实现的,并能够调用C语言的库文件.从一出生, ...
- python框架之Flask基础篇(一)
一.第一个hello world程序 # coding=utf-8 from flask import Flask app = Flask(__name__) @app.route('/') def ...
- python框架之Flask基础篇(四)-------- 其他操作
1.蓝图 要用蓝图管理项目,需要导入的包是:from flask import Buleprint 具体大致分为三步: 1.先在子模块中导入蓝图包,然后再创建蓝图对象. 2.然后将子模块中的视图函数存 ...
随机推荐
- 免费节假日 API
转载地址:http://timor.tech/api/holiday 获取指定日期的节假日信息 接口地址:http://timor.tech/api/holiday/info/$date@params ...
- Quartz 2D CGPattern学习笔记
CGPattern是在图形上下文中重复绘制的一系列绘制操作.你可以像使用颜色一样使用图案.当使用CGPattern进行绘制时,Quartz将页面划分为一组图案单元格,每个单元格的大小为CGPatter ...
- 》》》Win10配置Jdk环境变量
转载:Win10如何配置Jdk环境变量 (baidu.com) 对于每一位做Java开发的朋友来说,Jdk是必须要安装的,安装好了Jdk,其实并没有结束,还需要配置Jdk的环境变量,系统在不断地更新, ...
- 快速上手SpringBoot
快速上手SpringBoot SpringBoot是用来简化Spring应用的初始化搭建以及开发过程 三个不需要,这是springboot使用mvc区别于其它框架的特点 tomcatd的端口 下一行是 ...
- 【键盘快捷键】Super键
键盘快捷键 Super键 Windows/方框键.它有时也会被称为 Windows 键,徽标键或系统键 打开任务管理器 Ctrl+Shift+Esc
- ES6-Promise上
一.Promise作用:解决回调地狱问题 transitionend是过渡结束事件,只要过渡结束就会触发: 回调地狱:指的是层层嵌套的回调函数,代码看起来非常晕 <!DOCTYPE html&g ...
- df -T 和 du 统计的内存不一致
1.问题原因 客户反馈,df -T 查看到挂载到flash文件的emmc使用了6G左右,但是在flash下看到du -h 只用了2G左右,客户疑问,还有4G去哪儿了? 2.问题怀疑方向 1.怀疑启动阶 ...
- https://github.com/wuweilin/springboot-login-demo
wuweilin/springboot-login-demo: Springboot后端登录注册项目演示demo (github.com) jdk-8u172-windows-x64.exe apac ...
- twenty-three
Vue(用于构建用户界面的前端框架) Vue框架的特性,主要有 ① 数据驱动试图 ②双向数据绑定 js数据的变化,会被自动渲染到页面上 页面上表单采集的数据发生变化的时候,会被vue自动获取到,并更新 ...
- Cesium 结合Echarts绘制航线图
<template> <div id="cesiumContainer"></div> </template> <script ...