8 flask之路由系統
阿新 • • 發佈:2022-03-23
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__(函式名)