打开终端,跳转到`hello.py`文件所在的文件夹,进入python命令行模式,启动服务
python hello.py
如果一起正常的话会有类似下面的反馈
>
> 因为是通过`app.run()`启动的服务,所以会有个错误提示,提醒不能将此Web应用部署在生产环境中,可以暂时忽略
>
>
>
此时,打开浏览器,输入 127.0.0.1:5000/ 或者 localhost:5000/, 就可以看到 Hello World!欢迎字样。
#### 路由
路由是Web开发中一个很重要的概念,用来将不同的请求,映射到响应的处理方法上,这个方法被称为**视图函数**。比如刚才的`Hello`应用,将根请求,映射到`index`处理方法上,下面简单了解下Flask对路由的支持 Flask通过修饰器(和Java的注解类似)来建立路由映射关系的,已经看到修饰器是`app.rotue()`
###### 简单路由
如 访问 `/hello`
@app.route(‘/hello’)
###### 动态路由
如访问 `/user/bob` 或者 `/user/lily` 都会映射到同一视图函数上
@app.route(‘/user/’)
动态域名中动态的部分可以作为视图函数的参数,也支持多个动态参数,如访问 `/user/bob/23`
@app.route(‘/user//’)
还可以指定动态部分的数据类型,如
@app.route(‘/post/int:post_id’)
支持的数据类型
| 类型 | 说明 |
| --- | --- |
| string | (默认值) 任何不包含斜杠的文本 |
| int | 正整数 |
| float | 正浮点数 |
| path | 类似 string ,但可以包含斜杠 |
| uuid | 接受 UUID 字符串 |
###### 指定HTTP 方法
HTTP协议,支持多种HTTP 方法,例如`HEAD`、`OPTIONS`,以及常用的`GET`、`POST`等,Flask自动处理了`HEAD`和`OPTIONS`,路由默认接受的方法是GET,如果要匹配其他请求方法,可以在路由方法的`methods`参数来指定
@app.route(‘/login’, methods=[‘GET’, ‘POST’])
###### 复合路由
也可以将多个路由规则,用于一个视图函数, 如访问`/job/` 和访问 `/work/`效果是一样的
@app.route(‘/job/’)
再复杂一点的例子
@app.route(‘/users/’, defaults={‘page’: 1})
上面的代码表示,当访问`/user/`或者 `/user/page/` 时,都会有`show_users`视图函数来处理, 而且还为`/user/`提供了默认值,即访问`/user/`相当于访问 `/user/page/1`
#### 请求和响应
Web应用,最重要的事情就是处理接收到的请求,并返回响应。Flask框架也一样,它提供了请求对象`request`和响应对象`response`,可以方便的在视图函数中使用。
###### 请求
Flask将客户端发送的HTTP请求封装成了`request`请求对象,并且使用上下文(context)临时将`request`变为全局可访问的,于是在视图还是中,就可以直接使用了。
>
> **注意**: `request`并非真正的全局变量!试想,在多线程服务器中,多个线程同时处理不同客户端发送的不同请求时,每个线程看到的`request`对象必然不同。Falsk使用上下文让特定的变量在一个线程中全局可访问,与此同时却不会干扰其他线程。
>
>
>
Flask有两种上下文,分别为程序上下文和请求上下文,各自对应的全局变量如下表:
| 变量名 | 上下文类型 | 备注 |
| --- | --- | --- |
| current\_app | 程序上下文 | 表示当前运行的程序实例 |
| g | 程序上下文 | 处理请求时用作临时存储对象,每次请求都会重新设值 |
| request | 请求上下文 | 客户端发来的request请求对象 |
| session | 请求上下文 | 请求携带的会话信息 |
使用`request`对象前,需要先引入
from flash import request
`request`对象提供了丰富的属性和方法,这里举个例子:通过使用 `method` 属性可以操作当前请求方法,通过使用 `form` 属性处理表单数据(在 `POST` 或者 `PUT` 请求 中传输的数据)。以下是使用上述两个属性的例子:
@app.route(‘/login’, methods=[‘POST’, ‘GET’])
>
> **注意**:当 form 属性中不存在这个键时会发生什么?会引发一个 KeyError 。如果不处理这个错误 ,就会显示一个 HTTP 400 Bad Request 错误页面。
>
>
>
如果要操作 URL (如 ?key=value )中提交的参数可以使用 args 属性,如 : `searchword = request.args.get('key', '')`
###### 请求钩子
有时在处理请求之前或之后执行代码会很有用。例如,在请求开始时,可能需要创建数据库连接或者认证发起请求的用户。为了避免在每个视图函数中都使用重复的代码,Flask提供了注册通用函数的功能,注册的函数可在请求被分发到视图函数之前或之后调用。请求钩子使用修饰器实现。Flask支持以下4种钩子:
1. `before_first_request`:注册一个函数,在处理第一个请求之前运行。
2. `before_request`:注册一个函数,在每次请求之前运行。
3. `after_request`:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
4. `teardown_request`:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。
文末有福利领取哦~
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
**一、Python所有方向的学习路线**
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
**二、Python必备开发工具**

**三、Python视频合集**
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

**四、实战案例**
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。**(文末领读者福利)**

**五、Python练习题**
检查学习结果。

**六、面试资料**
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传
加入社区:https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0