1 flask介绍
一个基于python实现的web开发的框架
2安装flask
Pycharm 专业版新建flask 项目时建立新的虚拟环境
3.基于flask的最小应用
创建flask1.py文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'hello world'
if __name__ == '__main__':
app.run()
运行 右键 ==》 run
(1)初始化
from flask import Flask
app = Flask(__name__)
(2)路由和视图函数
@app.route('/')
def hello():
return 'hello world'
(3)服务器启动
if __name__ == '__main__':
app.run()
run()中的参数有
debug = True/False 是否开启调试模式
port 端口
host 主机
4修改启动方式,用命令行方式启动服务
安装插件
pip install flask-script
在flask1.py中添加代码
manager = Manager(app=app)
后一个app为自定义的flask对象
启动的地方改为
manager.run()
启动命令为
python flask1.py runserver -h 地址 -p 端口 -d -r
-d 表示debug模式
-r 表示自动重启
5 route 规则
5.1规则
传参路由:
# 1.<id>:默认接受的类型为str
@app.route('/get_id/<id>')
# 2.<string:id>,指定id的类型为str
@app.route('/get_string_id/<string:id>')
# 3.<int:id>,指定id的类型为整型
@app.route('/get_int_id/<int:id>')
# 4.<float:id>,指定id的类型为浮点数
@app.route('/get_float_id/<float:id>')
# 5.<path:path>,指定接受的path为url中的路径
@app.route('/get_path/<path_path>')
5.2methods请求方法
常用的请求类型有一下几种
GET:获取
POST:创建
PUT:修改
DELETE:删除
定义URL的请求类型
@app.route('/',methods=['GET','POST'])
6蓝图
6.1什么是蓝图
在falsk项目中可以使用Blueprint实现模块化的应用,使用蓝图可以让应用层次更清晰。
蓝图将作用于相同的URL前缀的请求地址,将具有相同前缀的请求都放在一个模块中。
6.2使用蓝图
6.2.1安装蓝图
pip install flask_blueprint
6.2.2实例化蓝图应用
blue = Blueprint('app',__name__)
此处传入了两个参数,第一个是蓝图的名称,第二个是蓝图所在的包或者模块,_name_代表当前模块名或者包名。
这个写在新建的views.py中
6.2.3注册
app.register_blueprint(blue,url_prefix='/app')
此处也传入了两个参数,第一个参数是我们定义初始化定义的蓝图对象,第二个参数url_prefix表示该蓝图下,所有的url请求必须以/app开始,这样对一个模块的Url可以很好的进行统一管理。
这个写在flask1.py中
6.2.3使用蓝图
修改视图上的装饰器,修改为@blue.route('/')
@blue.route('/',methods = ['GET'])
def hello():
return 'hello'
此方法对应的URL为127.0.0.1:5000/app/
6.2.4url_for 反向解析
语法:
url_for('实例化蓝图应用时的第一个参数.函数名',参数名=value)
定义跳转:
return redirect('/app/index/')
或者
return redirect(url_for('app.index'))
7请求request
服务端在接受到客户端的请求后,会自动创建Request对象
由Flask框架创建,Request对象不可修改
属性:
url:完整的请求地址
path:路由中的路径
method:请求方法
args:GET请求参数
form:POST请求参数
7.1 args
args 是 get 请求参数的包装,是一个ImmutableMultiDict对象,类字典结构对象
数据存储是key-value
7.2 form
form是 post 请求参数的包装, 是一个ImmutableMultiDict对象,类字典结构对象
数据存储是key-value
重点:ImmutableMultiDict是类字典的数据结构,但是区别是可以存在相同的键
从ImmutableMultiDict中获取数据的方式为 dicr['key']或者dict.get('key')或者dict.getlist('key')
前两种只能取出第一个值,getlist可以取出全部的值
8.响应 Response
Response 是由开发者自己创建的
创建方法
from flask import make_response
make_response 创建一个响应,是一个真正的Response对象
格式:
make_response(data,code),其中data是返回的数据内容,code是返回的状态码
例子
@blue.route('/get_response/')
def get_response():
logint_html = render_template('login.html')
res = make_response(login_html,200)
return res
9 .终止/异常捕获
自动抛出异常:abort(状态码)
捕获异常处理:errorhandler(状态码),定义的函数中要包含一个参数,用于接受异常信息
9.1定义终止程序
@blue.route('/make_abort/')
def get_abort():
abort(400)
return '终止'
自定义一个状态码在这里抛出
9.2捕获定义的异常
@blue.errorhandler(400)
def handler(exception):
return '捕获到异常信息:%s'%exception
自定义处理异常的界面
10 Cookie和Session
Cookie和Session的结合使用,一般有两种存储方式:
第一种:session数据保存在哭护短,Flask采用'secure cookie'方式保存session,即session数据是使用base64编码后保存在客户端的cookie中,无需依赖第三方数据库保存session数据
第二种:session数据存储在服务端,分为以下三步骤。
步骤1:客户端发送请求到服务端,服务端校验请求中cookie参数的sessionid值,如果不存在则认为客户端是发起了一个新的会话。
步骤2:如果是新的会话,则服务端会传递给客户端一个cookie,并在cookie中存储一个新的session值,并将相关数据保存在session中。
步骤3:客户端下一次在发送请求时候,请求上下文对象会携带cookie,通过校验cookie中的session值,即可判断是否是同一会话
步骤4:如果校验会话是同一会话,则可以从session中获取到之前保存的数据
10.1Cookie
客户端会话技术,浏览器的会话技术
数据全部存储在客户端中
存储使用的键值对结构进行存储
特性: 1 支持过期时间 2默认会自动携带本网站的cookie 3 不能垮域名 4 不能垮浏览器
创建
cookie是通过服务器创建的Response来创建的
设置:set_cookie('key',value,max_ages='',expires='')
删除,有三种方式
- 直接手动清空浏览器的cookie
- delete_cookie('key')
- set_cookie('key','',expires=0) 重新设置key的值为空,过期时间为0
获取:
request.cookies.get('key')
例子:
1 设置cookie
@blue.route('/setcookie/')
def set_cookie():
temp = render_template('index.html')
response = make_response(temp)
outdate = datetime.datetime.today() + datetime.timedelta(days=30)#设置有效时间
response.set_cookie('name','zhy',expires=outdate)
return response
2 删除cookie中的值
@blue.route('/sercookie/')
def set_cookie():
temp = render_template('index.html')
response = make_response(temp)
response.set_cookie('name','',expires=0)#通过set_cookie去删除
response.del_cookie('name')#del_cookie删除
3 获取cookie中的值
@blue.route('/getcookie/')
def get_cookie():
name = request.cookies.get('name')
return name
10.2 session
Flask-session是flask框架的session组件
该组件则支持session保存到多个地方
语法
设置session:
session['key'] = value
读取session:
result = session['key'] 如果内容不存在,则会报异常
result = session.get('key') 如果不存在,将返回None
删除session:
session.clear()
网友评论