1.helloworld.py
1#1.从flask模块导入了Flask类 2from flask import Flask 3 4#2.创建flask对象 5#参数1: __name__,如果从当前文件启动,那么值是__main__, 如果是从其他模块调用运行的那么值是模块的名字 6#参数2: static_url_path,表示静态资源的访问地址, /static 7#参数3: static_folder, 用来存储静态资源的,默认名字是static 8#参数4: template_folder, 模板文件夹,默认的值是templates 9app = Flask(__name__) 10print(__name__) 11print(app.static_url_path) 12print(app.static_folder) 13print(app.template_folder) 14 15#使用app,通过路由绑定一个视图函数 16#注意点: 视图函数一定要有返回值 17@app.route('/') 18def hello_world(): 19 return "hello world Flask" 20 21#判断是否直接使用当前模块运行程序 22if __name__ == '__main__': 23 #运行app程序 24 app.run()
2.url_map.py
1""" 2五,查看哪些路由(地址)可以访问 3- 格式: 使用app.url_map, 返回的是app装饰的所有的路由和路径之间的映射关系 4- 注意点: 只有被app.url_map包含进来的路由(地址)才能被访问 5 6""" 7 8from flask import Flask 9 10#创建flask对象 11app = Flask(__name__) 12 13#绑定路由和视图函数之间的映射关系 14@app.route('/') 15def index(): 16 17 return "<h1>this is index</h1>" 18 19@app.route('/haha') 20def index2(): 21 22 return "this is index2" 23 24#启动app 25if __name__ == '__main__': 26 print(app.url_map) 27 app.run()
3.apprun.py
1from flask import Flask 2 3app = Flask(__name__) 4 5@app.route('/haha') 6def hello_world(): 7 8 #print(1/0) 9 10 return "<h1>helloworld</h1>" 11 12if __name__ == '__main__': 13 14 app.run(host="127.0.0.1",port=5001,debug=True)
4.dynamic_params.py
1""" 2在访问路由的时候指定参数 3 4- 格式: @app.route("/<类型:变量名>") 5- 常见的参数类型 6 - 整数 int 7 - 小数 float 8 - 字符串 path(默认就是path) 9""" 10from flask import Flask 11 12app = Flask(__name__) 13 14#接收一个整数 15@app.route('/<int:number>') 16def get_intnumber(number): 17 18 return "the int is %s"%number 19 20#接收一个小数 21@app.route('/<float:number>') 22def get_floatnumber(number): 23 24 return "the float is %s"%number 25 26#接收一个字符串 27@app.route('/<path:number>') 28def get_pathnumber(number): 29 30 return "the path is %s"%number 31 32 33 34if __name__ == '__main__': 35 app.run(debug=True)
5.custom_converter.py
1""" 2八,自定义参数类型(自定义转换器) 3 4- 背景: 5 - 如果系统提供的int,float,等参数类型满足不了需求的时候,我们需要自定义 6 - 之所以,int,float,path可以接收不同的数据类型,是因为,系统已经提供好对应的转换器了 7- 自定义转换器格式 8 - 1.定义类,继承自BaseConverter 9 - 2.重写init方法 10 - 3.初始化父类成员变量, 还有子类自己的规则 11 - 4.将转换器类,添加到系统默认的转换器列表中 12 13 需求: 接收三位整数 14 15""" 16from flask import Flask 17from werkzeug.routing import BaseConverter 18 19app = Flask(__name__) 20 21 22# - 1.定义类,继承自BaseConverter 23class MyRegexConverter(BaseConverter): 24 #这样直接指定规则,不够灵活,具体应该匹配什么规则应该交给路由 25 # regex = "\d{3}" 26 27 # - 2.重写init方法,接收两个参数 28 def __init__(self,map,regex): 29 # - 3.初始化父类成员变量, 还有子类自己的规则 30 super(MyRegexConverter, self).__init__(map) 31 self.regex = regex 32 33# - 4.将转换器类,添加到系统默认的转换器列表中 34app.url_map.converters["re"] = MyRegexConverter 35 36#打印输出所有的系统转换器列表 37print(app.url_map.converters) 38 39#匹配三位整数 40#使用re('规则'),实际上是传递了两个参数,参数1: app.url_map, 参数2:括号中写的正则规则 41@app.route('/<re("\d{3}"):number>') 42def hello_world(number): 43 44 return "the three number is %s"%number 45 46#匹配四位整数 47@app.route('/<re("\d{4}"):number>') 48def get_four_number(number): 49 50 return "the four number is %s"%number 51 52#匹配一个手机号 53@app.route('/<re("1[3-9]\d{9}"):phone>') 54def get_phone_number(phone): 55 56 return "the phone number is %s"%phone 57 58if __name__ == '__main__': 59 app.run(debug=True)
6.methods.py
1""" 2九,给路由增加其他的访问方式 3 4- 格式: @app.route('路径',methods=['请求方式1','请求方式2',....]) 5- 常见的请求方式: 6 - GET,POST,PUT,DELETE 7 8""" 9from flask import Flask 10 11app = Flask(__name__) 12 13@app.route('/',methods=["POST","GET"]) 14def hello_world(): 15 16 return "helloworld" 17 18if __name__ == '__main__': 19 print(app.url_map) 20 app.run(debug=True)
7.return_reponse.py
1""" 2返回响应(字符串) 3 4- 1.直接返回响应体数据 5 - return '字符串' 6- 2.直接返回响应体数据+状态码 7 - return '字符串',转台码 8- 3.直接返回响应体数据+状态码+响应头信息 9 - return '字符串',转台码,{'key':'value'} 10 11""" 12from flask import Flask 13 14app = Flask(__name__) 15 16@app.route('/') 17def hello_world(): 18 19 # - 1.直接返回响应体数据 20 # return 'helloworld' 21 22 # - 2.直接返回响应体数据+状态码 23 # return 'helloworld',666 24 # return 'helloworld',"666 BIGERROR" 25 26 # - 3.直接返回响应体数据+状态码+响应头信息 27 return 'helloworld',200,{"Content-Type":"application/json","name":"banzhang"} 28 29 30if __name__ == '__main__': 31 app.run(debug=True)
8.jsonify.py
1""" 2十一,通过jsonify返回json数据 3 4- 格式: jsonify(dict) 5- 简化格式: jsonify(key=value,key2=value2) 6 7自动导入包: alt+ enter, 再次选择导入 8""" 9from flask import Flask, jsonify 10 11app = Flask(__name__) 12 13@app.route('/') 14def hello_world(): 15 16 #1.定义字典 17 dict = { 18 "name":"banzhang", 19 "age":29 20 } 21 #2.返回json数据 22 # return jsonify(dict) 23 24 #3.返回json数据简化格式 25 return jsonify(name='laowang',age=29) 26 27if __name__ == '__main__': 28 app.run(debug=True)
9.redirecy.py
1from flask import Flask, redirect 2 3app = Flask(__name__) 4 5@app.route('/banzhang') 6def banzhang(): 7 8 return redirect("/fubanzhang") 9 10 11@app.route('/fubanzhang') 12def fubanzhang(): 13 14 return "我是富班长,我有钱" 15 16 17 18if __name__ == '__main__': 19 app.run(debug=True)
10.redirect_practice.py
1from flask import Flask, redirect 2 3app = Flask(__name__) 4 5@app.route('/jingdong') 6def jingdong(): 7 8 #跳转到淘宝去 9 return redirect("http://www.taobao.com") 10 11if __name__ == '__main__': 12 app.run(debug=True)
11.url_for.py
1""" 2十三,url_for 3 4- 解释: 称为反解析,返回的是视图函数对应的路由地址 5- 格式: url_for('视图函数',key=value) 6 7""" 8from flask import Flask, url_for, redirect 9 10app = Flask(__name__) 11 12@app.route('/jingdong') 13def jingdong(): 14 15 print(url_for("taobao",token=123)) 16 #1.通过url_for找到taobao的地址, 然后通过redirect,进行重定向 17 response = redirect(url_for("taobao",token=123)) 18 19 #2.返回响应体对象 20 return response 21 22@app.route('/yamaxun') 23def yamaxun(): 24 #1.通过url_for找到taobao的地址, 然后通过redirect,进行重定向 25 response = redirect(url_for("taobao",token=456)) 26 27 #2.返回响应体对象 28 return response 29 30@app.route('/taobao/<int:token>') 31def taobao(token): 32 33 if token == 123: 34 return "欢迎京东用户,给你打5折" 35 elif token == 456: 36 return "欢迎亚马逊用户,给你打9折" 37 else: 38 return "欢迎其他网站用户,给你9.9折" 39 40if __name__ == '__main__': 41 app.run(debug=True)
12.abort_errorhandler.py
1""" 2十四,abort&errorhandler 3 4- 使用场景: 当访问服务器资源的时候,如果找不到该资源,可以报出异常信息,使用errorhandler捕捉 5- 格式: abort(代号) 6- 格式: @app.errorhandler(代号) 7 8""" 9from flask import Flask, abort 10 11app = Flask(__name__) 12 13@app.route('/') 14def hello_world(): 15 16 abort(403) 17 18 return "helloworld" 19 20#只要出现了404异常,就能捕捉 21@app.errorhandler(404) 22def page_not_found(e): 23 print(e) 24 return "<h1 style='color:red'>页面找不到</h1>" 25 26#只要出现了403异常,就能捕捉 27@app.errorhandler(403) 28def forrden(e): 29 print(e) 30 return "<h1 style='color:red'>禁止访问</h1>" 31 32if __name__ == '__main__': 33 app.run(debug=True)
13.request.py
1""" 2十五, request对象参数 3 4- request.data: 获取的是非表单(ajax)以post,提交的数据 5- request.form: 获取的表单以post方式提交的数据 6- request.args: 获取的是问号后面的查询参数 7- request.method: 获取的请求方式 8- request.url: 获取请求的地址 9- request.files: 获取的是input标签中type类型为file的文件 10 11""" 12from flask import Flask, request 13 14app = Flask(__name__) 15 16@app.route('/') 17def hello_world(): 18 19 print(request.method) 20 print(request.url) 21 print(request.args) 22 # print(request.args["name"]) #字典不建议使用[]的方式取值 23 print(request.args.get("name")) #如果获取不到不会报错,返回None 24 print(request.args.get("age",39)) #如果获取不到,设置一个默认值 25 26 return "helloworld" 27 28if __name__ == '__main__': 29 app.run(debug=True)
14.load_appparams.py
1""" 2十六,加载app程序运行参数 3 4- 1.从配置类(对象)中加载 5 - app.config.from_object(obj) 6- 2.从配置文件中加载 7 - app.config.from_pyfile(file) 8- 3.从环境变量中加载(了解) 9 - app.config.from_envvar(环境变量) 10- app.config: 表示app程序,运行所有的参数信息 11 12""" 13from flask import Flask 14 15app = Flask(__name__) 16# print(app.config) 17 18# 1.从配置类(对象)中加载 19class MyConfig(object): 20 #调试模式 21 DEBUG = True 22 23 #mysql数据库配置 24 25 #redis配置 26 27 #session配置 28 29# app.config.from_object(MyConfig) 30 31# 2.从配置文件中加载 32# app.config.from_pyfile("Config.ini") 33 34# 3.从环境变量中加载 35app.config.from_envvar("FLASKING") 36 37@app.route('/') 38def hello_world(): 39 40 return "helloworld" 41 42if __name__ == '__main__': 43 app.run()
15.request_hook.py
1""" 2十七,请求钩子 3 4- 解释: 当访问正常视图函数的时候,顺带执行的方法 5- 常见的请求钩子有四种: 6- 1.before_first_request:在处理第一个请求前执行 7- 2.before_request:在每次请求前执行,在该装饰函数中,一旦return,视图函数不再执行 8- 3.after_request:如果没有抛出错误,在每次请求后执行 9 接受一个参数:视图函数作出的响应 10 在此函数中可以对响应值,在返回之前做最后一步处理,再返回 11- 4.teardown_request:在每次请求后执行 12 接受一个参数:用来接收错误信息 13 14""" 15from flask import Flask 16 17app = Flask(__name__) 18 19#before_first_request装饰的函数在第一次访问的时候执行,里面适合做初始化操作,比如,io文件读写 20@app.before_first_request 21def before_first_request(): 22 print("before_first_request") 23 24#before_request,每次请求前都执行,适合对请求参数做校验,访问统计 25@app.before_request 26def before_request(): 27 print("before_request") 28 29#after_request,视图函数执行之后,返回该方法,适合对返回值做统一处理,比如:返回统一的json数据格式 30@app.after_request 31def after_request(resp): 32 print("after_request") 33 resp.headers["Content-Type"] = "application/json" 34 return resp 35 36#teardown_request,请求销毁之后,执行该方法,适合做异常信息统计 37@app.teardown_request 38def teardown_request(e): 39 print(e) 40 print("teardown_request") 41 42 43@app.route('/') 44def hello_world(): 45 46 return "helloworld" 47 48@app.route('/index') 49def index(): 50 return "index" 51 52 53if __name__ == '__main__': 54 app.run(debug=True)