flask框架(一)
1.flask简介
客户端向服务端发送请求,服务端不能主动给客户端服务,必须先请求。
一切可以联网,发送上网请求的东西就是客户端。
框架就是一个项目的半成品,我们做项目的时候只需要按照框架约定要求,在指定位置写上自己的业务逻辑代码。
python中常用的web框架:
flask:只提供基本功能,属于轻量级。2010年诞生。Armin ronacher
Django:提供相对完整功能,重量级。
tornado:偏嵌入式web应用,非阻塞式服务器。(会自动开启多任务)
flask框架介绍:
组成:werkzueg + jinja2
werkzueg:专门用来处理请求相关的内容的,比如:地址
jinja2:用来做页面渲染处理的
额外的扩展包:可以处理数据库的连接,站点管理,flask-cache做缓存处理。
2.虚拟环境
什么是虚拟环境:
就是一个特殊的文件夹,里面存放着程序,运行所需要的各种版本的python解释器,和各种框架的版本。
安装虚拟环境:
1、先查看操作系统中是否有虚拟环境:
virtualenv --version
2、如果查看之后没有虚拟环境的命令,则安装,需要联网
pip install virtualenv
pip install virtualenvwrapper
3、查看当前操作系统中有哪些虚拟环境的文件夹。
workon
4、创建虚拟环境文件夹。
#该命令安装好之后默认的python解释器是python2.x
mkvirtualenv 文件夹的名字
#指定安装python3.x的解释器
mkvirtualenv -p python3 虚拟环境文件夹
5、从虚拟环境中退出
deactivate [虚拟环境文件夹的名称]
6、进入到虚拟环境中
workon 虚拟环境名称
7、删除虚拟环境
rmvirtualenv 虚拟环境
8、安装flask框架
pip install flask==0.10.1
不是最新的版本,因为配套的东西没有更新,会有风险。
9、查看当前虚拟环境中有哪些扩展
pip freeze
搞定,已经可以使用flask做基本的开发了。
10、导出虚拟环境中的所有的扩展
pip freeze > requirements.txt
11、使用requirements.txt安装虚拟环境
pip install -r reqquirements.txt
3.pycharm中使用虚拟环境
在pycharm中使用虚拟环境:
1、先进入到虚拟环境中,输入which python
2、拷贝虚拟环境中的python解释器的路径,设置到pycharm中
ctrl + p 可以在pycharm中提示参数
4.查看那些路由(地址)可以访问
格式:使用app.url_map,返回的是app装饰的所有的路由和路径之间的映射关系
注意点:只有被app.url_map包含进来的路由(地址)才能被访问
5.app.run()参数:
参数一:host,如果我们不指定,默认值是127.0.0.1
参数二:port如果我们不指定,默认值是5000
参数三:debug,调试模式,如果不指定,默认的值是false(如果设置为true两个好处:1、如果在运行的过程中,直接改动代码了,不需要重新启动程序,只需要ctrl +s就可以保存即可部署程序。2、如果程序报错了,会有友情提示)
1/0叫做自杀,因为会报错
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "hello world Flask"
if __name__ == '__main__':
app.run()
6.在访问路由的时候指定参数
格式:@app.route("/<类型:变量名>")
常见的参数类型
整数:int
小数:float
字符串:path(默认就是path)
ctrl + r 直接查找替换
7.自定义参数类型(自定义转换器)
背景:如果系统提供的int,float等参数类型满足不了需求的时候,我们需要自定义
之所以int,float,path可以接受不同的数据类型,是因为,系统已经提供好了对应的转换器了
自定义转换器格式:
1、定义类,继承自BaseConverter
2、重写init方法,去接收两个参数
3、初始化父类成员变量,还有子类自己的规则
4、将转换器类,添加到系统默认的转换器列表中
ctrl + f 是搜索
8.给路由增加其他的访问方式
格式:@app.route('路径',methods=['请求方式1','请求方式2'....])
常见的请求方式:
GET/POST/PUT/DELETE
注意点:如果不指定请求方式,那么默认支持的是GET请求
9.返回响应
1、直接返回响应体数据
return ‘字符串’
2、直接返回响应体数据、状态码
return ‘字符串’,'状态码'
3、直接返回响应体数据、状态码、响应头信息
return '字符串',状态码,{'key':'value'}
10.通过jsonify返回json数据
格式:jsonify(dict)
简化格式:jsonify(key=value,key2=value2)
11.重定向
格式:redirect("地址")
(其实有两个参数,第二个参数是code默认是302)
上面的地址可以是本地服务器的地址,也可以是其他服务器的地址(外部链接,比如说:http://taobao.com)
注意点:重定向的代号是302
特点:重定向是两次请求。
pycharm中直接创建新文件的快捷键,看一下file,在下拉菜单中看第二个new中提示的快捷键是什么,就是什么,然后再输入pf(就是python file的意思),就会直接创建了
12.url_for
解释:称为反解析,返回的是视图函数对应的路由地址
格式:url_for("视图函数",key:value)
注意点:url_for经常配合redirect使用,传递参数。
13.abort和errorhandler
使用场景:当访问服务器资源的时候,如果找不到该资源,可以报出异常信息,使用errorhandler捕捉
格式:abort(代号)
格式:@app.errorhandler(代号)
14.request对象参数
request.data:获取的是非表单以post,提交的数据
request.form:获取的表单以post方式提交的数据
request.args:获取的是问号后面的查询参数(是个字典MultiDict也是字典,字典的形式有很多,但是都是key:value的方式)
request.method:获取的请求方式
request.url:获取的是请求的地址
request.files:获取的是input标签中type类型为file的文件
字典不建议使用[]的方式取值,在项目中一般使用get取值,如果获取不到不会报错,返回None。
dict.get("age",39)
如果获取不到age的value,就设置默认值为39
浏览器地址栏中:
?是查询参数
/是访问资源
15.加载app程序运行参数
1、从配置类(对象)中加载
app.config.from_object(obj)
2、从配置文件中加载
app.config.from_pyfile(file)
file可以是文件,我们可以写txt格式,ini格式(有颜色提示)等。直接将文件的路径填写进file的位置即可
3、从环境变量中加载(做了解)
app.config.from_envvar(环境变量)
环境变量在pycharm的右上角中,现在的文件那个框,然后选择edit,然后在里面选择配置environment,就可以配置了。
app.config
表示app程序,运行所有的参数信息
不是调试模式的时候,不会报错。
配置类里面还有mysql数据库配置、Redis配置、session配置等
16.请求钩子
解释:当访问正常视图函数的时候,顺带执行的方法
常见的请求钩子有四种:
1.before_first_request:在处理第一个请求前执行
里面适合做初始化操作,比如io文件读写
2.before_request:在每次请求前执行,在该装饰函数中,一旦return,视图函数不再执行
适合对请求参数做校验,访问统计
3.after_request:如果没有抛出错误,在每次请求后执行
接受一个参数:视图函数作出的响应
视图函数执行之后,返回该方法,适合对返回值做统一处理,比如返回统一的json数据格式
接收的参数是将视图函数的返回值打包之后的响应体信息。
在此函数中可以对响应值,在返回之前做最后一步处理,再返回
4.teardown_request:在每次请求后执行
接受一个参数:用来接收错误信息
请求销毁之后执行,执行该方法,适合做异常信息统计。在工作中,我们可以将这些异常信息放进文件中,方便我们隔一段时间进行查看。
这些知识点都是比较零散的知识点,在项目介绍的时候才会将所有的知识点进行整合,重复使用。
设置自己的小模块,快速导入重复代码:
- Owasp测试4.0手册
- 推荐一款Web渗透测试数据库
- 【提莫】一个域名收集及枚举工具
- chmod: changing permissions of `/usr/local/bin/...
- a windows service with the name MYSQL already e...
- NameError: name 'admin' is not defined(彻底解决方案)
- Error: No module named blog
- ubuntu中的django安装配置与操作
- IOS开发之-搜索栏UISearchController详解
- java归并排序(最精简代码)
- java希尔排序(最精简代码)
- java插入排序(最精简代码)
- java快速排序(最精简代码)
- java选择排序(最精简代码)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- redis源码之zset结构的实现
- Elasticsearch: range 数据类型及基于range的聚合 (7.4发行版新功能)
- 漫画:如何在数组中找到和为 “特定值” 的三个数?
- 除了MySQL,大牛DBA还会啥?
- 用 Docker swarm 快速部署分布式图数据库 Nebula Graph 集群
- Labelhub 基于腾讯云 Serverless 技术为人工智能企业提供数据与模型解决方案
- 手把手教你使用 Prometheus 监控 JVM
- 基于云开发 CloudBase 搭建在线视频会议应用
- 手搓一个分布式大气监测系统(六)云端能力更新、说明及源码放出
- maybe incorrect parameters such as bit_rate, rate, width or height
- vue 怎么将Checkbox 多选框选中的值提交
- vue-element怎么给select下拉框赋值?
- 小程序生成二维码海报的组件-wxa-plugin-canvas
- kbone 是什么?这可能是最好的小程序开源框架
- jQuery根据填写的input的数值导出excel表格