1.url路径参数获取
解析:把请求路径中最后一个<> 之间的字符串当做参数.
格式:
@app.route(’/<user_id>’)
def index(user_id):
return ‘user_id is {}’.format(user_id)
2.系统常用的转换器
常用转换器:
(1)string (默认)
格式: string:param
(2)int 整数类型的转换器
格式: int:param
(3)float 浮点类型转换器
格式: float:param
转换器的作用:
1.获取参数
2.转换类型
3.过滤掉不符合规则请求
3.自定义转换器
原因:当系统的转换器不能满足我们的需求,需要自定义转换器
需求:手机号码
步骤:
1.编写自己的转换器类,继承BaseConverter
class MobileConverter(BaseConverter)
2.重写regex类属性
regex = r’1[3-9]\d{9}’
3.把自定义转换器添加到转换器字典中
app.url_map.converters[‘mobile’] = MobileConverter
4.使用
@app.route(’/mobile:phone’)
小结:
灵活使用转换器,可以过滤大部分不符合规则请求。
4.使用request对象获取参数
解析:除了上面那种获取url参数之外,客户端传来的参数,都封装在request对象中
request属性:
①args 获取查询字符串参数
②form 获取表单数据
③data 获取原始数据
④url 获取请求路径
⑤method 获取请求方式
⑥headers 获取请求头
⑦files 获取文件
⑧cookies 获取cookie
小结:
所有的业务基本都是从获取参数开始,所以一定要熟练使用request对象
5.返回响应
在flask中,返回结果有两种方式
方式1:
return 'ok.'
方式2:
构建响应对象
response = make_response('ok.')
返回响应对象
return response
6.返回自定义状态码和头部(如上)
原因:返回指定的状态码和头部,是做web开发一定会遇到的问题
有两种方式
1.返回元组,返回多个值
return 'index', 404, {'token': 'laowang'}
2.使用response设置
response = make_response('index')
response.status_code = 405
response.headers['name'] = 'laoli'
return response
小结:
返回元组的方式,本质就是构建响应对象,只不过是flask替我们做了。
7.返回json数据
解析: json数据本质就是一个字符串, 除了返回json数据, 还要设置一下Content-Type.
1.使用json模块
return json.dumps(data), 200, {'Content-Type': 'application/json'}
2.使用jsonify
return jsonify(data)
return jsonify(name='laowang', age=18)
建议:
尽量使用jsonify
8.返回jinja2模板
解析:在Flask中,直接使用render_template返回模板
使用:
1.创建模板templates 文件夹(一定要将模板文件放在此文件夹中进行渲染,否则会报错!)
index.html
2.使用render_template渲染模板, 同时可以在后面追加参数.
return render_template('index.html', name='laowang', age=18)
备注:
1.状态码和头部的设置, 跟普通的响应一样.
2.render_template函数本质是渲染模板, 返回一个字符串
9.cookie使用
作用: 使用cookie做状态保持
使用:
1.使用response设置cookie
max_age: cookie的有效期时间
response.set_cookie(key, value, max_age)
return response
2.获取cookie
name = request.cookies.get('name')
3.删除cookie
response.delete_cookie(key)
原理:
设置响应头set-cookie,浏览器就会自动保存cookie
删除原理:
设置一个过期的时间
10.session使用
解析:在flask中,获取和设置session数据,都是使用session对象
使用方式:
1.设置secret key
app.config['SECRET_KEY'] = '123456'
# or
app.secret_key = '123456'
# or
app.config.update(SECRET_KEY='123456')
注意:一定要设置secret key,否则会报错:the session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret!
2.设置session
session[key] = value
3.获取session
session[key]
session.get(key)
小结:
在Flask中,session的数据是存放在浏览器中。称为浏览器session。
这样做的好处:减轻服务器的压力
11.abort的使用
作用: 抛出异常http状态码. 4XX 5XX
使用格式:
abort(http错误状态码)
12.异常捕获处理
场景:统一返回404不存在的页面。
使用格式:
@app.errorhandler(404)
def func_404(e):
return “这是一个漂亮的404页面”, 404
小结:
errorhandler除了可以捕获http错误状态码,还可以捕获0除错误等。
一般abort和异常捕获配合使用。
13.请求钩子的使用
作用:
准备和扫尾的工作。
Flask中请求钩子
1.在所有请求开始前执行一次
before_first_request
2.在before_first_request后,其他请求开始前执行(常用)
before_request
3.在所有请求视图执行后执行 (常用)
after_request
4.在after_request后执行
teardown_request
重点:
了解执行顺序
14.flask中的上下文对象
作用(重点):
①current_app: 指向处理当前请求的app对象,一般用在视图函数里获取配置信息
②g: 临时的全局变量,一般用于函数、钩子之间参数的传递
③request: 获取客户端参数
④session: 获取session数据
他们分成两种上下文对象
1.请求上下文对象
request, session
2.应用上下文对象
current_app, g
特点(难点):
在请求上下文,4个上下文对象都可用
在应用上下文中,current_app和g可用,request和session不可用
15.上下文对象
# 上下文管理类
class MyFile(object):
def __init__(self, filename):
self.file_obj = open(filename)
def __enter__(self):
return self.file_obj
def __exit__(self, exc_type, exc_val, exc_tb):
self.file_obj.close()
小结:
在Flask中就是使用上下文管理类技术,管理4个上下文对象
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。