一、flask介绍
1.flask的构成
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD授权。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
2.使用flask框架的原因
Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。
3.flask的优点
Flask旨在保持代码简洁且易于扩展,Flask框架的主要特征是核心构成比较简单,但具有很强的扩展性和兼容性,程序员可以使用Python语言快速实现一个网站或Web服务。一般情况下,它不会指定数据库和模板引擎等对象,用户可以根据需要自己选择各种数据库。Flask自身不会提供表单验证功能,在项目实施过程中可以自由配置,从而为应用程序开发提供数据库抽象层基础组件,支持进行表单数据合法性验证、文件上传处理、用户身份认证和数据库集成等功能。
4.flask构成部分的介绍
Flask主要包括Werkzeug和Jinja2两个核心函数库,它们分别负责业务处理和安全方面的功能,这些基础函数为web项目开发过程提供了丰富的基础组件。
Werkzeug(负责业务处理)库十分强大,功能比较完善,支持URL路由请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascript调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。
Jinja2(安全方面)库支持自动HTML转移功能,能够很好控制外部黑客的脚本攻击。系统运行速度很快,页面加载过程会将源码进行编译形成python字节码,从而实现模板的高效运行;模板继承机制可以对模板内容进行修改和维护,为不同需求的用户提供相应的模板。
5.flask特点
目前,我国市场上大部分智能交通系统控制平台采用的都是C/S模式,对终端要求较高,且安装繁琐。部分的平台也有采用基于B/S模式传统框架,但这些框架的一些功能大多被固定,缺乏灵活性。采用Flask微型框架做服务器的后台开发,Flask是基于Python开发的框架,类似的框架还有Django、Tornado等,之所选择Flask来开发,原因如下:
① 后续的基于机器学习的车辆检测与属性识别算法研究,主要开发语言也是应用Python,整个系统统一开发语言,便于开发和后期维护。
② Flask因为灵活、轻便且高效的特点被业界认可,同时拥有基于Werkzeug、Jinja2等一些开源库,拥有内置服务器和单元测试,适配RESTful,支持安全的cookies,而且官方文档完整,便于学习掌握。
③ Flask中拥有灵活的Jinja2模板引擎,提高了前端代码的复用率。这样可以提高开发效率和有利于后期开发与维护。在现有标准中,Flask算是微小型框架。Flask有两个主要依赖:路由、调试和Web服务器网关接口(WebServerGatewayInterface,WSGI)子系统由Werkzeug提供;模板系统由Jinja2提供。Werkzeug和Jinja2都是由Flask的核心开发者开发而成。对于数据库访问、验证Web表单和用户身份认证等一系列功能,Flask框架是不支持的。这些功能都是以扩展组件的方式进行实现,然后再与Flask框架集成。开发者可以根据项目的需求进行相应的扩展,或者自行开发。这与大型框架恰恰相反,大型框架本身做出了大部分决定,难以灵活改变方案。
6.flask的基本模式
Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上,其工作过程见图。
7.使用的flask版本
使用flask==1.1.1
8.flask提供了什么
- flask只能够完成最简单的请求响应
- jinja2 模板系统
- werkzeug 工具箱(wsgi)
- 插件
二、开始flask旅程
1. 创建虚拟环境
新建一个文件夹,在里面打开cmd命令
conda create -n FlaskPath python==3.5.2
启动虚拟环境
activate FlaskPath
2. 安装flask
pip install flask==1.1.1
安装版本小技巧:不知道安装哪个版本,可以查看已有版本号;例如:
pip install flask==5 ## 后面的版本号尽量往大了写
给我们安装的包
3. 使用flask
基本语法
在shell启动py文件进行查看
python hello.py
默认在5000端口
修改启动端口号为8000,开启debug模式
4. flask()参数
flask的源文件
flask源文件参数 |
含义 |
import_name |
应用程序包的名称; Flask程序所在的目录,所在的包位置,传 name , 决定了 flask静态文件,模板文件的寻找地址 |
static_url_path=None |
static路由地址,默认为空,可以修改为指定路由地址 ;可用于为web上的静态文件指定不同的路径。默认为static_folder文件夹的名称 |
static_folder=“static” |
static目录名,默认为static,可以修改 |
static_host |
添加静态路由时使用的主机。默认为None。在配置static_folder时使用host_matching=True是必需的 |
host_matching |
设置url_map。host_matching属性。默认值为False |
subdomain_matching |
在匹配路由时,考虑相对于SERVER_NAME的子域。默认值为False |
template_folder |
包含应用程序应该使用的模板的文件夹。默认设置为应用程序根路径中的“templates”文件夹 |
instance_path |
应用程序的另一个实例路径。默认情况下,包或模块旁边的文件夹‘instance’被认为是实例路径 |
instance_relative_config |
如果将用于加载配置的相对文件名设置为True,则假定该配置相对于实例路径而不是应用程序根目录 |
root_path |
默认情况下,Flask将自动计算到应用程序根目录的路径。在某些情况下,这是无法实现的(例如,如果包是python3命名空间包),需要手动定义。 |
-
import_name
- Flask程序所在的目录,所在的包位置,传 name
- 决定了 flask静态文件,模板文件的寻找地址
-
static_url_path
- 静态文件的访问地址,可以不传,默认为 / + static_folder
-
static_folder
- 静态文件的目录,可以不传,默认为static
-
template_folder
- 模板文件的存储位置,可以不传,默认为 templates
5. 路由
① flask中的路由跟django中的路由的区别
django中使用路由: urls.py path("/",视图)
然后再在视图中写def index()
flask路由 直接在py文件中 使用装饰器
- @app.route(’/index/’)
- def index():
② flask中路由的注意事项及路由的写法
- url应该以/ 开头
- url写法 标准的是 / /
- 视图函数不能重名
- 习惯: 将视图函数的名字命名为 路由的名字
③ 路由传参
1. 转换器语法 <>
<> 叫转换器语法 默认为string类型,
- 路由中使用了
- 视图中增加参数 username
- 类型:
- string 默认类型
- int 整形
- float
2. path: 包含斜杠的路径,通常用于路径的拼接
3. uuid:通用唯一识别码
路由后面传的参数id为:例如uuid4()所对应的一串
uuid4随机数
④ flask请求
在django中
django
## 查看请求方式
request.method
## 获取请求中的内容所对应的值
request.GET.get()
request.POST.get()
1.flask get请求
第一步:导包
from flask import request
默认支持get请求
获取get请求的参数
2. flask post请求
报错405,
原因:没有给其增加请求方式
flask 默认不支持post请求
解决:增加请求方式
获取post请求参数
如果要在一个视图函数中实现多个请求方式可以在请求方式中添加需要实现的请求
6. flask中request的一些方法
from flask import request
request中的一些方法 |
作用 |
args |
获取get请求的参数 |
form |
获取post请求的参数 |
cookies |
获取cookie |
method |
获取请求方式 GET POST |
url |
获取请求url地址 |
file |
获取请求上传的文件 |
headers |
请求报文的头 |
7. 静态文件
django—》 配置settings中增加 static目录位置
flask中使用静态文件
在flask启动文件的同目录创建static目录,可以通过修改Flask参数修改 static目录
8. 模板(变量传递的方法)
在脚本文件同级目录创建 templates目录,可以通过修改Flask参数改变模板文件的目录
flask使用的 jinja2 的模板系统
- 调用静态模板
- 传递数据
-
变量的传递的第一种方法
-
变量传递第二种方法
-
变量传递第三种方法
- **locals()
① 模板语法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>我是templates</h1>
<hr>
<h2>变量的使用</h2>
{{ name }} {{ age }}
<hr>
<h2>字符串处理方法</h2>
{{ name.capitalize() }}
<br>
{{ name.upper() }}
<br>
{{ name.replace("e","###") }}
<hr>
{{ name.1 }} <!--取字符串中索引为1的第二个-->
<br>
{{ name + "再见" }}
<br>
{{ name.split("l") }}
<hr>
<h2>jinja2循环</h2>
{% for one in name %}
{{one}}<br>
{% endfor%}
<hr>
<h2>jinja2判断</h2>
{% if name == "hello"%}
{{name}}
{% else %}
<span>没有名字</span>
{% endif %}
<hr>
{{ mydict.get("yuwen") }}
{{ mydict.shuxue }}
{{ mydict['shuxue'] }}
<br>
{% for key,value in mydict.items() %}
{{key}}:{{value}}
{% endfor %}
<img src="/static/lang.jpg" alt="">
</body>
</html>
9. 模板继承
与django一样
base.html
{% block title %} {%endblock%}
子页面
{% extends "base.html"%}
{% block title %} 子页面{%endblock%}
base页面 提取公共部分 ,修改静态文件位置,增加block
10. 启动配置项说明
启动配置项 |
介绍 |
host |
主机ip |
port |
端口号,默认5000 |
debug |
debug模式,True代表了开启debug模式,可显示错误,修改代码后自动重启项目 |