Flask小知识点

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 %} ,如若文件不存在也不报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值