Flask 读书笔记(1)

<font face="宋体" size=3.5>


# Chapter2  Flask 程序的基本结构
## 一、初始化 Flask
1.  使用`app = Flask(__name__)`创建程序实例
2.  name参数决定了程序的根目录


## 二、路由和视图函数
1.  **路由**:URL到Python函数的映射关系,Flask程序中定义路由的最简单式,是使用程序实例提供的`app.route`[**修饰器**](http://3ms.huawei.com/hi/group/3144251/thread_6049401.html?mapId=7580363&for_statistic_from=all_group_forum)
2.  修饰器是Python的标准特性,修改函数的行为,常用于把函数注册为事件的处理程序
3.  特定的URL触发服务器执行相应的函数,函数的返回值称为**响应**,该函数称为**视图函数**
4.  `@aap.route('/user/<name>')`匹配包含可变部分的URL,尖括号内是动态部分,匹配静态部分的URL都会映射到路由上,动态部分作为参数传入视图函数


## 三、启动服务器
1.  `app.run()`启动Web服务器


## 四、完整程序
1.  在地址栏输入`http://127.0.0.1:5000/`,可见视图函数的响应


## 五、请求-响应循环
1.  上下文  
    a). 为了让视图函数访问请求对象,可将其作为参数传入视图函数,但会增加函数的参数。Flask使用**上下文**临时把某些对象变为全局可访问。  
    b). Flask让特定的变量在一个线程中全局可访问,与此同时却不会干扰其他线程。  
    
    > 避免大量重复参数的访问导致视图函数代码重复、乱的问题,Flask使用**上下文**使一些变量在一个线程中全局可访问,不会干扰其它线程  


    c). Flask有两种上下文:
    * 程序上下文`current_app, g`
    * 请求上下文`request, sessiom`  


    d). 上下文被推送`app_ctx.push()`后,就可以使用,否则会报错。  
2.  请求调度  
    a). Flask使用`app.route`修饰器或者非修饰器形式的`app.add_url_rule()`生产映射  
    b). 通过`app.url_map`查看URL映射  
    c). 程序收到客户端发来的请求时,要找到处理该请求的视图函数  
3.  请求钩子  
    a). 避免视图函数代码的重复,可用**请求钩子**:Flask提供注册通用函数的功能,可在请求被
    分发到视图函数之前或之后调用  
    b). Flask支持4种钩子:
    * `before_first_request`:第一个请求前运行
    * `before_request`:每一次请求前运行
    * `after_request`:没有未处理的异常抛出时,在每次请求之后运行
    * `teardown_request`:即使有异常,每次请求后运行


    c). 请求钩子函数与视图函数之间用`g`变量共享数据。例如`before_request`处理程序从数据库中加载已登录用户,并保存到`g.user`中,视图函数再使用`g.user`获取用户  
4.  响应  
    a). 视图函数的返回值就是响应;可以添加**状态码**返回,默认值是200,表明请求被成功处理;响应可添加第三个参数,由首部`(header)`组成的字典,不常用  
    b). 使用`make_response`函数返回`Response`对象,然后在响应对象上调用各种方法,进一步设置响应  
    ```
    from flask import make_response
    @app.route('/')
    def index():
        response = make_response('<h1>This document carries a cookie!</h1>')
        response.set_cookie('answer', '42')
        return response
    ```
    c). **重定向**:特殊的响应类型,没有页面文档,只告诉浏览器一个新地址用以加载新页面,经常用于Web表单;302状态码表示
    ```
    from flask import redirect
    @app.route('/')
    def index():
        return redirect('www.baidu.com')
    ```
    d). `abort()`产生了一种特殊响应,用于处理错误,返回状态码404;abort不会吧控制权交还给调用它的视图函数,而是抛出异常把控制权交给Web服务器


## 六、Flask扩展
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值