flask操作指南一

flask操作指南一

1.flask介绍

Flask是一个基于Python实现的web开发的’微’框架

Flask和Django一样,也是一个基于MVC设计模式的Web框架

flask流行的主要原因:

a)有非常齐全的官方文档,上手非常方便。
b) 有非常好的拓展机制和第三方的拓展环境,工作中常见的软件都有对应的拓展,自己动手实现拓展也很容易。
c) 微型框架的形式给了开发者更大的选择空间。

2.安装flask

2.1虚拟环境搭建

virtualenv --no-site-packages falskenv
激活windows下虚拟环境
cd Scripts
activate

2.2安装

pip install flask

3.基于flask的最小的应用

创建hello.py文件

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World'

if __name__ == '__main__':

    app.run()

运行:python hello.py

3.1初始化

from flask import Flask

app = Flask(__name__)

Flask类构造函数唯一需要的参数就是应用程序的主模块或包。对于大多数应用程序,Python的name变量就是那个正确的、你需要传递的值。Flask使用这个参数来确定应用程序的根目录,这样以后可以相对这个路径来找到资源文件。

3.2路由

@app.route('/')

客户端例如web浏览器发送 请求 给web服务,进而将它们发送给Flask应用程序实例。应用程序实例需要知道对于各个URL请求需要运行哪些代码,所以它给Python函数建立了一个URL映射。这些在URL和函数之间建立联系的操作被称之为 路由 。

在Flask应程序中定义路由的最便捷的方式是通过显示定义在应用程序实例之上的app.route装饰器,注册被装饰的函数来作为一个 路由。

3.3视图函数

在上一个示例给应用程序的根URL注册hello_world()函数作为事件的处理程序。如果这个应用程序被部署在服务器上并绑定了域名,然后在你的浏览器地址栏中输入这个域名将触发hello_world()来运行服务。客户端接收到的这个函数的返回值被称为 响应 。如果客户端是web浏览器,响应则是显示给用户的文档。 类似于hello_world()的函数被称作 视图函数 。

3.4动态名称组件路由

用尖括号括起来的部分是动态的部分,所以任何URL匹配到静态部分都将映射到这个路由。当视图函数被调用,Flask发送动态组件作为一个参数。在前面的示例的视图函数中,这个参数是用于生成一个个性的问候作为响应。

@app.route('/hello/<name>')

def gello_world(name):

    return 'Hello World %s' % name

在路由中动态组件默认为字符串,但是可以定义为其他类型。例如,路由/user/int:id只匹配有一个整数在id动态段的URL。Flask路由支持int、float

3.5服务启动

if __name__ == '__main__':

    app.run()

注意: name == ‘main’在此处使用是用于确保web服务已经启动当脚本被立即执行。当脚本被另一个脚本导入,它被看做父脚本将启动不同的服务,所以app.run()调用会被跳过。

一旦服务启动,它将进入循环等待请求并为之服务。这个循环持续到应用程序停止,例如通过按下Ctrl-C。

有几个选项参数可以给app.run()配置web服务的操作模式。在开发期间,可以很方便的开启debug模式,将激活 debugger 和 reloader 。这样做是通过传递debug为True来实现的。

run()中参数有如下:

debug 是否开启调试模式,开启后修改python的代码会自动重启

port 启动指定服务器的端口号

host主机,默认是127.0.0.1

4.修改启动方式,使用命令行参数启动服务

4.1 安装插件

pip install flask-script

调整代码 manager = Manager(app=‘自定义的flask对象’)

启动的地方 manager.run()

4.2 启动命令

python hellow.py runserver -h 地址 -p 端口 -d -r

其中:-h表示地址。-p表示端口。-d表示debug模式。-r表示自动重启

5.route规则

5.1 规则

string 字符串
int 整形
float 浮点型
path 接受路径,接收的时候是str,/也当做字符串的一个字符
uuid 只接受uuid字符串
any 可以同时指定多种路径,进行限定

例子:

@app.route('/helloint/<int:id>/')

@app.route('/getfloat/<float:price>/')

@app.route('/getstr/<string:name>/',methods=['GET', 'POST'])

@app.route('/getpath/<path:url_path>/')

@app.route('/getbyuuid/<uuid:uu>/',methods=['GET', 'POST'])

实现对应的视图函数:

@blue.route('/hello/<name>/')
def hello_man(name):
    print(type(name))
    return 'hello name:%s type:%s' % (name, type(name))

@blue.route('/helloint/<int:id>/')
def hello_int(id):
    print(id)
    print(type(id))
    return 'hello int: %s' % (id)

@blue.route('/index/')
def index():
    return render_template('hello.html')

@blue.route('/getfloat/<float:price>/')
def hello_float(price):

    return 'float: %s' % price

@blue.route('/getstr/<string:name>/')
def hello_name(name):

    return 'hello name: %s' % name

@blue.route('/getpath/<path:url_path>/')
def hello_path(url_path):

    return 'path: %s' % url_path

@blue.route('/getuuid/')
def gello_get_uuid():
    a = uuid.uuid4()
    return str(a)

@blue.route('/getbyuuid/<uuid:uu>/')
def hello_uuid(uu):

    return 'uu:%s' % uu

5.2 methods请求方法

常用的请求类型有如下几种

GET : 获取
POST : 创建
PUT : 修改(全部属性都修改)
DELETE : 删除
PATCH : 修改(修改部分属性)

6.蓝图

6.1什么是蓝图

在Flask项目中可以用Blueprint(蓝图)实现模块化的应用,使用蓝图可以让应用层次更清晰,开发者更容易去维护和开发项目。蓝图将作用于相同的URL前缀的请求地址,将具有相同前缀的请求都放在一个模块中,这样查找问题,一看路由就很快的可以找到对应的视图,并解决问题了。

6.2 使用蓝图

6.2.1安装

pip install flask_blueprint

6.2.2实例化蓝图应用

blue = Blueprint(‘first’,__name__)

注意:Blueprint中传入了两个参数,第一个是蓝图的名称,第二个是蓝图所在的包或模块,name代表当前模块名或者包名。

6.2.3注册

app = Flask(__name__)

app.register_blueprint(blue, url_prefix='/user')

6.3使用蓝图

修改视图上的装饰器,修改为@blue.router(‘/’)

@blue.route('/', methods=['GET', 'POST'])
def hello():
    # 视图函数
    return 'Hello World'

注意:该方法对应的url为127.0.0.1:5000/user/

6.4 url_for反向解析

语法:

url_for('蓝图中定义的第一个参数.函数名',函数名)

定义跳转:

from flask import url_for, redirect

@blue.route('/redirect/')
def make_redirect():
    # 第一种方法
    return redirect('/hello/index/')
    # 第二种方法
    return redirect(url_for('first.index'))

7.请求与响应

7.1请求request

服务端在接收到客户端的请求后,会自动创建Request对象

由Flask框架创建,Request对象不可修改

属性:

url:完整的请求地址

base_url:去掉GET参数的url

host_url:只有主机和端口号的url

path:路由中的路径

method:请求方法

remote_addr:请求的客户端的地址

args:GET请求参数

form:POST请求参数

files:文件上传

headers:请求头

cookies:请求中的cookie

7.1.1 args–>GET请求参数包装

a)args是get请求参数的包装,args是一个ImmutableMultiDict对象,类字典结构对象

b)数据存储也是key-value

7.1.2 form–>POST请求参数包装

a)form是post请求参数的包装,args是一个ImmutableMultiDict对象,类字典结构对象

b)数据存储也是key-value

重点:ImmutableMultiDict是类似字典的数据结构,但是与字典的区别是,可以存在相同的键。在ImmutableMultiDict中获取数据的方式,dict[‘key’]或者dict.get(‘key’)或者dict.getlist(‘key’)。

7.2 响应Response

Response是由开发者自己创建的

创建方法:

from flask import make_response

make_response创建一个响应,是一个真正的Response对象

格式:make_reponse(data,code),其中data是返回的数据内容,code是状态码

a)直接将内容当做make_response的第一个参数,第二个参数直接写返回的状态码

b)直接在render后加返回的状态码

定义一个获取GET请求的request的方法,并将返回成功的请求的状态码修改为200

@blue.route('/getrequest/', methods=['GET'])
def get_request():

    print(request)

    return '获取request', 200

返回response响应,并添加返回结果的状态码200

@blue.route('/getresponse/')
def get_response():
    response = make_response('<h2>我是响应</h2>', 500)
    return response

7.3重定向/反向解析

url_for('蓝图定义的名称.方法名')

例子1:

定义跳转方法,跳转到get_response的方法上

@blue.route('/getredirect/')
def get_redirect():

    return redirect('/getresponse/')

例子2:

使用url_for反向解析

from flask import redirect, url_for

@blue.route('/getredirect/')
def get_redirect():

    return redirect(url_for('first.get_response'))

7.4 终止/异常捕获

自动抛出异常:abort(状态码)

捕获异常处理:errorhandler(状态码),定义的函数中要包含一个参数,用于接收异常信息。

7.4.1定义终止程序

@blue.route('/make_abort/')
def get_abort():
    abort(400)
    return '终止'

7.4.2 捕获定义的异常

@blue.errorhandler(400)
def handler(exception):

    return '捕获到异常信息:%s' % exception
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值