目录
一、Flask是什么?
二、Flask常用扩展包
三、第一个Flask程序
四、路由
五、response对象
一、Flask是什么?
Flask是Python语言基于Werkzeug工具箱编写的轻量级Web开发框架,其几乎所有功能都要用到扩展,其WSGI工具箱采用Werkzeug(路由模块),模板引擎使用Jinja2,是一种更为灵活的开发框架
二、Flask常用扩展包
1.操作数据库:Flask-SQLalchemy
2.管理迁移数据库:Flask-migrate
3.邮件:Flask-Mail
4.表单:Flask-WTF
5.提供国际化和本地化支持,翻译:Flask-Bable
6.插入脚本:Flask-script
7.认证用户状态:Flask-Login
8.认证:Flask-OpenID
9.开发REST API的工具:Flask-RESTful
10.集成前端Twitter Bootstrap框架:Flask-Bootstrap
11.本地化日期和时间:Flask-Moment
12.简单可扩展的管理接口的框架:Flask-Admin
中文文档介绍Flask:
http://docs.jinkan.org/docs/flask/
三、第一个Flask程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14#导入Flask扩展 from flask import Flask #创建flask应用程序实例 app=Flask(__name__) #定义路由以及视图函数 #flask中定义路由是通过装饰器实现 @app.route('/') def index(): return 'Hello,flask!Hello,flask!' #启动程序 if __name__ == '__main__': #执行了app.run,就会将flask程序运行在一个简易的服务器(Flask提供,用于测试) #host给出允许外网访问 app.run()
debug模式:布尔类型,默认为False
1>debug=True:当代码改变时,服务器会重新加载最新代码,此模式适用于开发环境development
2>debug=False:只会加载出第一遍的代码,代码改变不会自动加载 ,适用于生产环境production
config:修改配置
复制代码1
2app.config['ENV']='development' app.config['DEBUG']='True'可以将默认的production环境修改为development环境
app.config.fome_object(settings):可以将setting中写好代码直接导入
Flask程序运行过程:
1.当客户端想要获取资源时,一般会通过浏览器发起HTTP请求
2.此时,Web服务器会把来自客户端的所有请求都交给Flask程序实例
3.程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)
4.根据每个URL请求,找到具体的视图函数并进行调用,在Flask程序中,路由的实现一般是通过程序实例的装饰器实现
5. Flask调用视图函数后,可以返回两种内容:
1>字符串内容:将视图函数的返回值作为响应的内容,返回给客户端(浏览器)
2>HTML模版内容:获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染HTTP响应数据, 然后返回响应数据给客户端(浏览器)
四、路由
1.常见的HTTP状态码:
1.200-请求成功
2.301-资源(网页等)被永久转移到其它(URL)
3.404-请求的资源(网页等)不存在
4.500-内部服务器错误(代码问题)
HTTP状态码分类:HTTP状态码由三个十进制数字组成,第一个数字为状态码类型,后俩个无分类作用
分类 | 分类描述 |
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
2.路由:是指分组从源到目的地时,决定端到端路径的网络范围的进程,现代web应用都使用有意义的URL,通常使用route()装饰器将函数绑定到URL
复制代码1
2
3@app.route('/index') def index(): return 'Hello,flask!'等效于
复制代码1
2
3def index(): return 'Hello,flask!' app.add_url_rule('/index,view_func=index')
请求方式限定:L路由默认只支持GET,如果需要增加需要使用methods参数指定可接收的请求方式
复制代码1@app.route('/',methods=['GET','POST'])
3.路由的变量规则:通过将URL一部分标记为<variable_name>就可以在URL中添加变量,通过使用<converter:variable_name>可以选择性添加一个转换器,为变量指定规则(变量默认为string类型)
转换器类型 | 说明 |
string | 接收任何不包含斜杠的文本 |
int | 接收正整数 |
float | 接收正浮点数 |
path | 类似string但可以包含斜杠 |
uuid | 接收UUID字符串 |
例:加法运算
1
2
3
4
5
6
7
8
9from flask import Flask app=Flask(__name__) @app.route('/add/<int:num>') def get_order_id(num): print (type(num)) result=num+1 return str(result)#结果返回只能是字符串/字典/元组/Response instance/WSGI callable if __name__=='__main__': app.run()
注意:
1>路由中若添加了'/'即@app.route('/progects/),无论请求的URL是否带有‘/’都可以执行视图函数如果请求的是没有‘/’浏览器做了一次重定向
2>若路由中未添加‘/’,@app.route('/progects)但是请求的URL中添加即http://127.0.0.1:5000/progect/,那么显示Not Found
五、Response对象
1.return 后面直接返回字符串实际也是做了一个response对象的封装,最终返回结果还是response对象
1
2
3
4
5
6
7
8
9from flask import Flask,Response app=Flask(__name__) app.config['ENV']='development' app.config['DEBUG']='True' @app.route('/index1') def index1(): return Response('今天星期几?') if __name__=='__main__': app.run()
2.通过make_response,自定义响应头、响应体和状态码来自定义response对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24from flask import Flask, Response, make_response app=Flask(__name__) app.config['ENV']='development' app.config['DEBUG']='True' @app.route('/index2') def index2(): content=''' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 这是一个模板<br> 这是一个首页<br> </body> </html> ''' response = make_response(content) response.headers['mytest']='abcd' return response if __name__ == '__main__': app.run()
最后
以上就是醉熏钢笔最近收集整理的关于【Flask笔记】一、Flask是什么?二、Flask常用扩展包的全部内容,更多相关【Flask笔记】一、Flask是什么内容请搜索靠谱客的其他文章。
发表评论 取消回复