【Flask笔记】

目录

一、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程序

#导入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:修改配置

app.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

@app.route('/index')
def index():
    return 'Hello,flask!'

等效于

def index():
    return 'Hello,flask!'
app.add_url_rule('/index,view_func=index')

请求方式限定:L路由默认只支持GET,如果需要增加需要使用methods参数指定可接收的请求方式

@app.route('/',methods=['GET','POST'])

3.路由的变量规则:通过将URL一部分标记为<variable_name>就可以在URL中添加变量,通过使用<converter:variable_name>可以选择性添加一个转换器,为变量指定规则(变量默认为string类型)

转换器类型 说明
string 接收任何不包含斜杠的文本
int 接收正整数
float 接收正浮点数
path 类似string但可以包含斜杠
uuid 接收UUID字符串

例:加法运算

from 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对象

from 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对象

from 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()

猜你喜欢

转载自blog.csdn.net/m0_70964767/article/details/126721064