主要分享介绍:
路由、request对象、response对象、状态保持
路由:
概述:请求地址会被底层Werkzeug库处理(去除ip和端口),用于进行路由匹配,匹配成功后将找打的视图函数进行调用,处理本次用户的请求
格式:
@工程对象.route("url地址")
或
@蓝图对象.route("url地址")
url_map属性
功能:查看当前所有的路由配置
使用:print(app.url_map)
提取路由中的部分
通过<>从url地址中取值,传递给视图函数使用
@myApp.route("/info/<sid>/")
def info(sid):
#默认参数值类型为字符串类型
return "sid:{}".fomate(sid)
简单约束
类型约束:
@myApp.route("/info2/<int:sid>/")
def info2(sid):
return "info2:sunck is a good man! he is %d years old"%(sid)
@myApp.route("/info2/<string:sid>/")
def info3(sid):
return "info3:sunck is a good man! he is %s years old"%(sid)
路径约束:
@myApp.route("/info4/<path:sid>/")
def info4(sid):
return "info4:%s"%(sid)
正则约束
作用:使用正则表达式对路由进行更具体的约束
正则转换类(app.py文件中增加)
from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
def __init__(self, url, *args):
super().__init__(url)
self.regex = args[0]
在app中注册
app.url_map.converters["regex"] = RegexConverter
使用:
@myApp.route("/info5/<regex('\d{2}'):sid>/")
def info5(sid):
#正则约束是约束的值的样子,不会约束类型
return "info5:sunck is a good man! he is %d years old"%(int(sid))
http方法
概述:默认视图可以被GET访问,flask中可以规定以什么样的方式请求视图,如果使用不正确的请求方式会返回405错误
示例:
@myApp.route("/login/", methods=["POST"])
def login():
return "登陆成功"
@myApp.route("/login/", methods=["POST", "GET"])
def login():
return "登陆成功"
常用的http请求方式:“GET”、“POST”、“PUT”、“PATCH”、“DELETE”
request对象(请求对象)
作用:获取请求报文中传递的数据
简介:浏览器发送到服务器的所有报文被flask接收后,创建request对象,request对象会被用在视图函数中,获取请求的数据
使用方法:导入
from flask import request
属性:
url:完整的请求URl
url_charset:编码格式
url_root:去掉“?”后面的参数
url_rule:正则匹配网址
base_url:去掉GET参数的url
host_url:只有主机ip和端口的url
path:装饰器中写的路由地址
full_path:去掉了ip和端口剩下的完整的url
remote_addr:请求客户端的ip地址
remote_user:请求客户端的用户名
method:请求的方式
args:获取GET方式请求的数据
view_args:提取url中的部分值传递给视图的参数
form:获取POST方式请求的数据
files:用于上传文件
headers:存储所有请求头信息
cookies:存储所有请求的cookie
ImmutableMultiDict类型对象
概述:request对象中的args、form、files属性都是该类型的对象
是类似字典的对象,与python中的字典的区别在于该类型的对象用来处理一个键拥有多个值的情况
方法:
get()
功能:根据键获取值
注意:只能获取键的一个值(如果一个键有多个值,获取第一个值)
getlist()
功能:将键的值以列表的形式返回
reponse对象(响应对象)
作用:返回给客户端的信息
概述:request对象是有服务创建的,response对象需要程序员手动创建
使用
导入:from flask import make_response
原形:
def make_response(*args):
def make_response(info, status, headers):
参数:
info:必选参数
status:可选参数
headers:可选参数
示例:
@myApp.route("/res/")
def res():
response = make_response("hello word", 200, {"Content-Type": "text/plain; charset=utf-8"})
return response
或直接返回字符串
@myApp.route("/res2/")
def res2():
response = make_response("hello word")
return response
或返回页面
@myApp.route("/res3/")
def res3():
response = render_template("index.html")
return response
设置状态码
@myApp.route("/res4/")
def res4():
response = make_response("hello word", 400)
return response
注意:状态码一般无需手动创建,最好不要自创状态码
重定向
导入:from flask import redirect
示例:
@myApp.route("/test1")
def test1():
return redirect("/test2")
@myApp.route("/test2")
def test2():
return "hello word"
终止执行
概述:如果是视图函数执行过程中出现了错误,可以通过abort函数立即终止视图函数的执行
通过abort函数可以向客户端返回一个http标准状态码,表示出错的信息 如果触发了abort函数,那么其后面的代码不会被执行
导入:from flask import abort
示例:
@myApp.route("/test/<int:num>")
def test(num):
if num == 0:
#终止执行
abort(400)
ret = 1 / num
return "hello word"
捕获中断
@myApp.errorhandler(400)
def error400(e):
print(e)
return "捕获成功"
@myApp.errorhandler(404)
def error404(e):
print(e)
return "notfind"
状态保持
概述:指登录保持或身份验证,在这里只介绍常用的cookie和session,可自行学习flask_login模块用于状态保持
导入:from flask import session
设置存储位置:
本地缓存
配置文件中设置
# session是否长期有效,如果为False则关闭浏览器session失效
SESSION_PERMANENT = True
# session长期有效,则设定session的生命周期,单位是秒,默认大致3小时
PERMANENT_SESSION_LIFETIME = 60 * 60 * 24 * 14
# 是否强制加盐(密)混淆session(是否对发送到浏览器上的session的cookie值进行加密)
SESSION_USE_SIGNER = True
# 如果加盐,必须设置安全码
SECRET_KEY = str(uuid.uuid4())
# session存储模式
SESSION_TYPE = "null"
redis缓存
需安装flask-session模块
创建三方对象
from flask_session import Session
sess = Session()
app加载三方对象
sess.init_app(app)
配置文件中设置
# redis
SESSION_PERMANENT = True
PERMANENT_SESSION_LIFETIME = 60 * 60 * 24 * 14
SESSION_USE_SIGNER = True
SECRET_KEY = str(uuid.uuid4())
SESSION_TYPE = "redis"
# 存储到redis中键的前缀
SESSION_KEY_PREFIX = "session:"
#redis服务器配置,默认使用0库
SESSION_REDIS = Redis(
host="www.sunck.wang",
port="6379",
password="sunck2000"
)
还可用sqlalchemy、memcached、filesystem、mongodb等数据库缓存
写session
session[key] = value
读session
value = session.get(key, default=None)
删session
session.pop(key,None)
素材来源sunck