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:在每次请求后执行

接受一个参数:用来接收错误信息

请求销毁之后执行,执行该方法,适合做异常信息统计。在工作中,我们可以将这些异常信息放进文件中,方便我们隔一段时间进行查看。

这些知识点都是比较零散的知识点,在项目介绍的时候才会将所有的知识点进行整合,重复使用。

设置自己的小模块,快速导入重复代码:

原文发布于微信公众号 - 小闫笔记(Pythonnote)

原文发表时间:2018-12-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券