python三大框架之一flask应用

创建一个python项目

第一步:打开pytharm

第二步:创建pure python 类型的项目

第三步:创建项目完成之后选择之前创建的py3_flack 作为虚拟环境

第四步:路径可以通过在制定虚拟环境下,输入which python 获得

例如:

新建文件:helloworld.py

导入Flask类: from flask import Flask

Flask函数接收一个参数__name__ ,它会指向程序所在的包: app = Flask(__name__)

装饰器的作用是将路由映射到视图函数 index:

@app.route("/")

def index():

  return "hello"

Flask应用程序实例的run方法启动WEB服务器

if __name__ == "__main__":

#port修改端口号,flask默认端口号是5000,debug测试改变,默认Flast

app.run(debug=True,port=5001)

路由基本定义

(1)制定路由地址

#使用flask路由器,指定网址和控制器

#制定访问路径为 /

@app.route("/")

def index():

  return "hello"

(2)有时我们需要将同一类url映射到同一个视图函数上,所以我们需要给路由传参

#给网址增加参数功能使用<变量名称>,路由方法要和 路由器定义的参数同步

【1】传递单个参数

@app.route("/hello/<id>")

def hello(id):

  return "你好,你的参数是: %s" % id

【2】传递多个参数

@app.route("/hello/<id>/<name>")

def hello(id,name):

  return "你好,你的参数是: %s,%s" % (id,name)

【3】 路由传递的参数默认当作str处理,也可以设定参数的类型

@app.route("/hello/<int:id>")

def hello(id):

  return "你好,你的参数是: %s" % id

小总结:

因为尖括号中的内容是动态的,所以尖括号中 在这里指定参数的类型,实际上是int代表integerConverter 去处理url传递的参数

视图常用逻辑

1.返回json

在使用Flask写接口时需要给客户端返回一个json数据,在Flask中可以指接使用jsonify生成一个JSON响应

例:

#使用jsonify模块来让网址直接显示json数据

@app.route("/json")

def re_json():

#定义好数据格式

  json_dict = {'id':10,'title':'flask的应用','countent':'flask的json格式化'}

#使用jsonify将定义好的数据转换成json格式,并返回给前端

  return jsonify(json_dict)

在使用jsonify模块时,显示内容可能出现编码问题解决方案如下:

(1)在代码中,插入数据

#解决中文乱码问题,

app.config['JSON_AS_ASCII'] = False

#开启debug模式

app.config['DEBUE'] = True

(2)从配置文件里面加载配置

步骤:

1.在当前文件下创建一个文件,例如:config.ini

2.在新文件中写入 DEBUG = True ,JSON_AS_ASCII = False #代码必须大写

3.在写代码的文件中写入 : app.config.from_pyfile('config.ini')

小建议:

不推荐直接使用json.dumps转成JSON字符串返回,因为返回的数据要符合HTTP协议规范。

(3) 建立一个配置类从配置中加载配置

# class Config(object):

# DEBUG = True

# TSON_AS_ASCII = False

app.config.from_object(Config)

(4)

从环境变量中加载

app.config.from_envvar("app_config")

2.重定向

重定向可以:

自己的视图函数;可以直接填写自己的url路径;也可以使用url_for生成指定试图所对应的url

例:

(1)

#直接填写自己的url路径

@app.route('/123')

def reurl():

return redirect("http://music.163.com/")

(2)自己的视图函数

@app.route('/demo')

def demo():

return 'demo'

(3)使用url_for生成指定试图所对应的url

@app.route('/demo')

def demo():

return redirect(url("demo1"),user_id = 100)

异常捕获

统一对状态码进行捕获

@app.errorhandler(405)

def internal_sever_error(e):

return "这个接口不能用get请求,只能用post请求"