创建一个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请求"