目录
2-2-2 方式二、继承 views.MethodView 类 - 常用方式
三、 路由的正则支持 - 基于BaseConverter实现正则规则
一、基本使用
@app.route('/detail/<int:nid>',methods=['GET'],endpoint='detail')
1-1 默认转换器
DEFAULT_CONVERTERS = { 'default': UnicodeConverter, 'string': UnicodeConverter, 'any': AnyConverter, 'path': PathConverter, 'int': IntegerConverter, 'float': FloatConverter, 'uuid': UUIDConverter, }
二、add_url_rule - 装饰器本质分析及使用
2-1 route装饰器 源码分析
route的装饰器本质是 add_url_rule 函数的使用
@app.route("/login", methods=['GET',"POST"],endpoint='loginname') def login(): return '登录' # 效果同上装饰器的使用 app.add_url_rule('/login', 'loginname', login, methods=['GET',"POST"]) ''' def add_url_rule(self, rule, endpoint=None, view_func=None, provide_automatic_options=None, **options): '''
2-1-1 add_url_rule使用效果测试
from flask import Flask, request, render_template, redirect, session, url_for app = Flask(__name__) app.debug = True app.secret_key = 'test' # 模拟数据库内信息 USER_LIST = { 1: {'name': '张三', 'age': 18, 'gender': '男', 'text': "道路千万条"}, 2: {'name': '李四', 'age': 28, 'gender': '男', 'text': "安全第一条"}, 3: {'name': '王五', 'age': 18, 'gender': '女', 'text': "行车不规范"}, } from functools import wraps def login_decorator(func, ): # @wraps(func) def wrapper(*args, **kwargs): if 'user' in session: res = func(*args, **kwargs) return res return redirect('/login') return wrapper @app.route('/') @login_decorator def index(): return 'ok' # @app.route('/login', methods=['GET', 'POST'],endpoint=loginname) def login(): if request.method == 'GET': return render_template('login.html') else: # 取出表单提交的name数据 name = request.form.get('name') pwd = request.form.get('pwd') if name == 'test' and pwd == '123': # 登录成功 写session session['user'] = name return 'login success' else: # django中传字典,这里传**字典 # return render_template('login.html',**{'error':'用户名或密码错误'}) return render_template('login.html', error='用户名或密码错误') app.add_url_rule('/login', 'loginname', login, methods=['GET', 'POST']) if __name__ == '__main__': app.run()
错误信息分析:单独使用add_url_rule时,必须手动指定endpoint参数