1、Flask
组成:werkzueg(专门用来处理请求相关URL) + jinja2(用来渲染模板页面) + 其他扩展包(flask-cache)
2、自定义转换器
#重写父类BaseConverter class MyRegexConverter(BaseConverter): # regex = '\d{3}' def __init__(self, map, regex): super(MyRegexConverter, self).__init__(map) self.regex = regex # 将转换器类添加到系统默认的转换器列表中 app.url_map.converters['abc'] = MyRegexConverter @app.route('/<abc("1[3-9]\d{9}"):number>') def hello(number): return 'the number is %s' % number
3、返回响应
return '字符串',状态码,响应头信息
return jsonify()
url_for('视图函数', key=value) 反解析,返回视图函数相对应的路由地址
4、abort &errorhandler
当访问服务器资源时,如果找不到该资源,可以报出异常信息,使用errorhandler捕捉
@app.route('/index') def index(): abort(404) return 'hello' @app.errorhandler(404) def page_not_found(e): print(e) return "页面找不到"
5、request对象参数
request.data# 获取非表单以post提交的数据
request.form# 获取的表单以post提交的数据
request.args# 获取?后的查询数据
request.url #获取请求地址
request.method #获取请求方式
request.files #获取file类型的文件
6、加载信息的配置
class Myconfig(object): DEBUG = True # 从配置类中加载 app.config.from_object(Myconfig) # 从配置文件中加载 app.config.from_file('config.ini')
7、请求钩子
访问正常视图函数的时候,顺带执行的方法
常见的四种请求钩子:
#第一次访问时执行,适合做初始化操作,比如io文件读写 @app.before_first_request def before_first_request(): print("before first request") #每次请求前都执行,适合对请求参数做校验,比如访问统计 @app.before_request def before_request(): print("before request") #视图函数执行后返回到该方法,适合对返回值做统一处理 @app.after_request def after_request(resp): resp['Content-Type'] = "applicaation/json" print("after request") return resp #请求销毁之后执行该访问,适合做异常信息统计 @app.teardown_request def teardown_request(e): print(e) print("teardown request")
8、cookie 用来保持服务器和浏览器交互状态,服务器设置,保存在浏览器
设置:response.set_cookie(key,value,max_age)
获取: request.cookies.get('key')
# 获取响应体对象 response = make_response('set cookie') response.set_cookie('computer', 'lenovo') name = request.cookies.get('computer')
9、session 服务器和浏览器来做状态保持的,存储敏感信息,服务器设置,存储在服务器
用来做用户的登录状态保持
session 的存储依赖于cookie,存储在cookie中的sessionID需要加密,需要设置app.config['SECRET_KEY'] = 'ddjsijsiss'
设置:session.session[key] = value
获取:value = session.get(key)
10、上下文(了解即可)
(1)请求上下文:
request 封装请求相关的数据
session 封装的是和用户相关的敏感信息
(2)应用上下文 :
current_app: 是app的一个代理对象,可以以此获取app设置的各种属性,应用在模块化开发中
g 变量:是一个局部的全部变量,主要在装饰器中
11、Flask_script 是flask扩展,用来动态运行程序,配合flask_migrate做数据库迁移
安装:pip install flask_script
创建对象manager,管理app
使用manager启动应用程序
python xxx.py runserver -h(IP) -p(端口) -d(调试模式)
manager = Manager(app) manager.run()
12、自定义过滤器
def get_oushu(lst):
return 'aa'
app.add_template_filter(get_oushu,'oushu')
模板中使用:
<h2>原列表:{{ [1,2,3,4,5] }}</h2>
<h2>偶数列表:{{ [1,2,3,4,5] | oushu }}</h2>
13、代码复用
<1>宏:相当于函数,定义一段功能,需要时调佣即可
使用当前文件中的宏:
{% macro 宏名(参数) %}
{% endmacro %}
自定义宏
{% macro my_macro(name,passwd) %}
用户名:<input type="text" value="{{ name }}"><br>
密码:<input type="password" value="{{ passwd }}"><br>
{% endmacro %}
调用宏
{{ my_macro('name','22222') }}
使用其他文件中的宏:
{% import 'HTML文件' as 别名 %}
{{ 别名.宏名(参数) }}
<2>继承
父模板:
{% block myblock %}
<h1>你好</h1>
{% endblock %}
子模板:
{% extends 'fileter_file.html' %} 继承父模板
{% block myblock %} 重写父模板内容
{{ super() }} 不去除父模板内容
<p>哈哈哈</p> 子模板新加内容
{% endblock %}
<3>包含:一个文件中完全拥有另一个文件,不灵活,没法扩展
方式一:{% include '文件' %}
方式二:{% include '文件' ignore missing %} ,如若文件不存在也不报错