flask 路由和视图
路由设置的俩种方式
@app.route('/xxx') def index(): return 'index' ------------------------------------------ def index(): return "index app.add_url_rule('/xxx',None,index)
注意事项:
- 不要让endpoint重名
- 如果重名函数也一样要相同
参数
rule, url规则 view_func, 视图函数名称 endpoint=None, 名称, 用于反向生成url, 即: url_for('str') methods=None, 允许的请求方式, 如: ["GET","POST"] strict_slashes=None, 对url最后的/ 是否严格要求 redirect_to=None, 重定向 defaults=None, 默认值,使用defaults={'k':'v'}为函数提供参数 subdomain=None, 子域名访问
CBV
import functools form flask import Flask,views app = Flask(__name__) def wrapper(func): @functools.wraps(func) def inner(*args,**kwargs): return func(*args,**kwargs) return inner class UserView(view.MethodView): methods = ['GET'] decorators = [wrapper,] def get(self,*args,**kwargs): return "get"
自定义正则
from flask import Flask,url_for app = Flask(__name__) # 步骤一: 定制类 from werkzeug.routing import BaseConverter class RegexConverter(BaseConverter): def __init__(self, map, regex): super(RegexConverter, self).__init__(map) self.regex = regex def to_python(self, value): """ 路由匹配时, 匹配成功后传递给视图函数中参数的值 """ return int(value) def to_url(self, value) """ 使用url_for反向生成URL时,传递的参数经过该方法处理,赶回的值用于生成URL中的参数 """ val = super(RegexConverter, slef).to_url(value) return val #步骤二: 添加到转换器 app.url_map.converters['reg'] = RegexConverter """ 1. 用户发送请求 2. flask内部进正则匹配 3. 调用to_python(正则匹配的结果)方法 4. to_python方法的返回值会交给视图函数的参数 """ #步骤三 :使用自定义正则 @app.route('/index/<reg("\d+"):nid>') def index(nid): print(nid, type(nid)) url_for('index',nid=988) return "index" if __name__ == '__main__': app.run()