-
转换器 < >
from flask import Flask app = Flask(__name__) @app.route('/index/<float:id>') #路由默认是GET请求,即在浏览器上面的路径的请求 # @app.route('/index/<float:id>',methods = ['GET','POST']) def index(id): if id == 1.0: return 'cg' return 'hello world!!!' if __name__ == '__main__': app.run(debug=True) ''' <>提取参数 < int : id > int自带的转换器 string:接受所有不带斜杠的文本 float:接受浮点类型 int:接受整数类型 path:接受带斜杠的文本 '''
-
自定义转换器 < : >
from flask import Flask from werkzeug.routing import BaseConverter app = Flask(__name__) class RegexConverter(BaseConverter): '''自定义转换器类''' def __init__(self,url_map,regex): super(RegexConverter, self).__init__(url_map) self.regex = regex def to_python(self,value): print('调用了') return value '''将自定义的转换器类添加到flask应用中''' app.url_map.converters['re'] = RegexConverter @app.route('/index/<re("[1,9]"):value>') def index(value): print(value) return 'hello world!!!' if __name__ == '__main__': app.run(debug=True) ''' 自定义转换器,re正则表达式,规定路由的url路径 '''
-
自定义请求(请求异常)
from flask import Flask, render_template, request, abort app = Flask(__name__) @app.route('/index', methods=['GET', 'POST']) def index(): if request.method == 'GET': return render_template('index.html') elif request.method == 'POST': name = request.form.get('zh') password = request.form.get('pwd') print(name, password, sep='\n') if name=='123' and password=='123': return 'POST请求' else: abort(404) # abort函数是在网页中抛出异常 # print('服务器渲染,路径无错误') # return render_template('index.html') # 自定义异常 @app.errorhandler(404) #抓取abort抛出的异常 def handle404(err): # return f'你出错了{err}' return render_template('404.html') if __name__ == '__main__': app.run(debug=True) ''' 首先通过render_template 服务器渲染html文件(注意路径不要写错了), 再通过request模块请求服务器找请求方式 判断是否是post请求,在表单中的method规定了请求方式 request.form.get('name')获取表单中的传入值 ''' # Html ''' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> 账号:<input type="text" name="zh"><br> 密码:<input type="password" name="pwd"><br> <input type="submit" name="submit" value="提交"> </form> </body> </html> '''
-
重定向(redirect)
from flask import Flask,redirect,url_for app = Flask(__name__) @app.route('/4399',methods=['GET','POST']) def index1(): return redirect('http://www.4399.com/') @app.route('/url_hello',methods=['GET','POST']) def index2(): print(url_for('hello')) #返回结果:/hello return redirect(url_for('hello')) #默认有一个/ @app.route('/hello') def hello(): return 'hello world' if __name__ == '__main__': app.run(debug=True) ''' 技术总结: redirect库用来重定向网页,自动跳转 url_for库可以找到当前根目录下的路由地址 index1可以自动跳转到4399游戏页面 index2可以自动跳转到/hello页面 '''
-
传入数据到前端页面(jsonify)
from flask import Flask,make_response,json,jsonify app = Flask(__name__) app.config['JSON_AS_ASCII'] = False #修改配置文件 @app.route('/index') def index(): data = { 'name':'王者农药' } # res = make_response(json.dumps(data,ensure_ascii=False)) # res.mimetype = 'application/json' # return res return make_response(jsonify(data)) if __name__ == '__main__': app.run(debug=True) ''' 技术总结(返回JSON数据给前端): 导入make_response,json库是一种方式: 首先通过json把python字典类型的数据变成json数据类型, 其中的ensure_ascii = False 取消掉ascii编码 mimetype转换数据类型为application/json类型 导入jsonify库: 可直接把字典数据变成json,不需要转换格式 不过需要app.config['JSON_AS_ASCII'] = False 修改一下配置文件才能看到中文 '''
-
服务器渲染(render_template)
from flask import Flask,render_template app = Flask(__name__) @app.route('/index', methods=['GET', 'POST']) def index(): data = { 'name':'laozhu', 'age': 18, 'my_list':[1,2,3,4,5,6,7] } return render_template('index2.html',data=data) def update_list(li): return li[::2] app.add_template_filter(update_list,'li2') #添加自定义过滤器方法 第一参数是自定义方法 第二参数是c if __name__ == '__main__': app.run(debug=True) ''' # index2.html <p>hello world</p> <p>{{data}}</p> <p>{{data['name']}}</p> <p>{{data.name}}</p> <p>{{data['age']}}</p> <p>{{data['my_list']}}</p> <p>{{'hello'|upper}}</p> //过滤器 |后面的方法对前面的字符串进行操作 <p>{{data['my_list'] | li2 }}</p> //自定义过滤器 '''
-
蓝图(Blueprint)
from flask import Flask,Blueprint app = Flask(__name__) #1、创建蓝图对象 bp = Blueprint('bp',__name__,url_prefix='users') # Blueprint第一参数是蓝图名字,第二参数自身py文件,第三参数是添加url路由前缀 #2、定义蓝图路由 @bp.route('/user') def users(): return 'user' #3、注册蓝图对象 app.register_blueprint(bp) @app.route('/index', methods=['GET', 'POST']) def index(): return 'hello' if __name__ == '__main__': app.run(debug=True) #蓝图 Blueprint flask自带的模块 查看路由的方法:终端输入 flask routes
-
返回
from flask import Flask app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def index(): return 'string',404,{'Server':'python','Date':'2022-04-24'} # return ('string',404,{'Server':'python','Date':'2022-04-24'}) '''返回元组信息:flask中返回的数据都是存入元组中,(字符串,状态码,响应头)''' if __name__ == '__main__': app.run(debug=True)
-
Request 和 make_response 设置获取cookie
from flask import Flask,make_response,request app = Flask(__name__) # 设置cookie @app.route('/set', methods=['GET', 'POST']) def index(): res = make_response('这是响应体!') res.set_cookie('tysay','ayang',max_age=60) # max_age设置cookie的有效期为60 秒 return res # 获取cookie @app.route('/get', methods=['GET', 'POST']) def get_cookie(): res = request.cookies.get('tysay') print(res) return res if __name__ == '__main__': app.run(debug=True)
-
session
from flask import Flask,session app = Flask(__name__) app.config['SECRET_KEY'] = '2022' #需要设置密钥才可以设置session信息 # 设置session @app.route('/set', methods=['GET', 'POST']) def index(): session['tysay'] = 'ayang' #值得注意的是session数据存储在cookie中的 return 'hello world' # 获取session @app.route('/get', methods=['GET', 'POST']) def get_cookie(): res = session.get('tysay') print(res) return res if __name__ == '__main__': app.run(debug=True)
-
g对象
from flask import Flask,g app = Flask(__name__) def info(): yhm = g.user_name pwd = g.password print(f"用户名:{yhm}密码:{pwd}") @app.route('/', methods=['GET', 'POST']) def index(): g.user_name = 'tysay' g.password = '123456' info() #注意:这里并没有传入参数,却也取得到,这就是g对象的作用 return 'hello world' if __name__ == '__main__': app.run(debug=True) ''' g对象是flask创建的一个g对象用来存储临时的全局变量 '''
版权声明:本文为Tysayy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。