8 flask之路由系统
1 默认method是get
main.py
from flask import Flask, request, render_template, redirect
app = Flask(__name__)
@app.route('/login')
def login():
if request.method == "GET":
return render_template('login.html', a1=1)
else:
# request.query_string
user = request.form.get('user')
pwd = request.form.get('pwd')
if user == 'dzg' and pwd == '123':
return redirect('http://www.baidu.com')
return render_template('login.html', error='用户名或密码错误')
if __name__ == '__main__':
app.run()
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post">
<input type="text" name="user">
<input type="text" name="pwd">
<input type="submit" value="登录">{{error}}
</form>
</body>
</html>
2 典型写法
endpoint 相当于起别名
@app.route('/detail/<int:id>', methods=['GET'], endpoint='detail')
def detail(id):
pass
3 默认转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
4 路由系统本质
"""
1. decorator = app.route('/',methods=['GET','POST'],endpoint='n1')
def route(self, rule, **options):
# app对象
# rule= /
# options = {methods=['GET','POST'],endpoint='n1'}
def decorator(f):
endpoint = options.pop('endpoint', None)
self.add_url_rule(rule, endpoint, f, **options)
return f
return decorator
2. @decorator
decorator(index)
"""
#同理
def login():
return '登录'
app.add_url_rule('/login', 'n2', login, methods=['GET',"POST"])
#与django路由类似
#django与flask路由:flask路由基于装饰器,本质是基于:add_url_rule
#add_url_rule 源码中,endpoint如果为空,endpoint = _endpoint_from_view_func(view_func),
最终取view_func.__name__(函数名)