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