Flask 的路由系统 FBV 与 CBV
Flask的路由系统
本质:带参数的装饰器传递函数后 执行 add_url_rule 方法将 函数 和 url 封装到一个 Rule对象将Rule对象 添加到 app.url_map(Map对象)
注意:装饰器要放在路由的上方 -- 注意装饰器的执行顺序
1 路由格式以及参数
@app.route('/user/<username>')
@app.route('/post/<int:post_id>')
@app.route('/post/<float:post_id>')
@app.route('/post/<path:path>')
@app.route('/login', methods=['GET', 'POST'])本质: app.add_url_rule(rule 路由, endpoint 别名, f 视图函数, **options 参数)
常用路由系统有以上五种,所有的路由系统都是基于一下对应关系来处理:
DEFAULT_CONVERTERS = {'default': UnicodeConverter,'string': UnicodeConverter,'any': AnyConverter,'path': PathConverter,'int': IntegerConverter,'float': FloatConverter,'uuid': UUIDConverter,
}
app.route和app.add_url_rule参数详细:
rule, URL规则view_func, 视图函数名称 #CBV 使用 view_func=IndexView.as_view(name='...')defaults=None, 默认值,当URL中无参数,函数需要参数时,使用defaults={'k':'v'}为函数提供参数endpoint=None, 名称,用于反向生成URL,即: url_for('名称')methods=None, 允许的请求方式,如:["GET","POST"]
strict_slashes=None, 对URL最后的 / 符号是否严格要求
如:
@app.route('/index',strict_slashes=False),访问 http://www.xx.com/index/ 或 http://www.xx.com/index均可@app.route('/index',strict_slashes=True)仅访问 http://www.xx.com/index
redirect_to=None, 重定向到指定地址
如:@app.route('/index/<int:nid>', redirect_to='/home/<nid>')或def func(adapter, nid):return "/home/888"@app.route('/index/<int:nid>', redirect_to=func)
subdomain=None, 子域名访问
公网上线时租域名 aaa.com/net租用服务器 + 公网IP 213.213.21访问 域名 -->> (域名解析)ip测试时 修改hostshosts文件127.0.0.1:8000 www.aaa.com127.0.0.1:8000 www.admin.aaa.com127.0.0.1:8000 www.username.aaa.com使用子域名from flask import Flask, views, url_forapp = Flask(import_name=__name__)app.config['SERVER_NAME'] = 'www.aaa.com:5000' # 配置主域名@app.route("/", subdomain="admin") # 子域名 admin.aaa.comdef static_index():return "static.your-domain.tld"@app.route("/dynamic", subdomain="<username>") # 传参--字符串 username.aaa.com/dynamicdef username_index(username):return username + ".your-domain.tld"if __name__ == '__main__':app.run()
2 url_for 与 endpoint
url反向生成
无参数app.route('/login',method=['GET','POST'],endpoint='login')视图return redirect(url_for('login'))模板<form action='{{url_for("login")}}'></form>有参数app.route('/index/<int:nid>',method=['GET','POST'],endpoint='index')视图return redirect(url_for('index',nid=111))模板<form action='{{url_for("index",nid=111)}}'></form>
3 让路由支持正则
from flask import Flask, views, url_for
from werkzeug.routing import BaseConverter # 导入基础转换类app = Flask(import_name=__name__)# 正则表达式类
class RegexConverter(BaseConverter):"""自定义URL匹配正则表达式"""def __init__(self, map, regex):super(RegexConverter, self).__init__(map)self.regex = regexdef to_python(self, value):"""路由匹配时,匹配成功后传递给视图函数中参数的值:param value: :return: """return int(value)def to_url(self, value):"""使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数:param value: :return: """val = super(RegexConverter, self).to_url(value)return valapp.url_map.converters['regex'] = RegexConverter # 添加到flask中@app.route('/index/<regex("\d+"):nid>') # 使用
def index(nid):print(url_for('index', nid='888'))return 'Index'if __name__ == '__main__':app.run()
4 Flask 的FBV与CBV
不常使用
from flask import Flask,views,redirect,url_for # 导入views 基础类app = Flask(__name__)# 定义装饰器
def auth_decorator(func):def inner(*args,**kwargs):print('装饰器')return func(*args,**kwargs)return innerCBV 添加 装饰器 和 指定 请求方法
class IndexView(views.MethodView):methods = ['POST','GET'] # 指定允许的 请求方法decorators = [auth_decorator] # 所有方法都加上 装饰器def get(self):return redirect(url_for('home'))def post(self):return 'POST'class HomeView(views.MethodView):def get(self):return 'Home'app.add_url_rule('/index',view_func=IndexView.as_view(name='index'))
app.add_url_rule('/home',view_func=HomeView.as_view(name='home'))# CBV 只能通过这种方式 # view_func = IndexView.as_view(name='index') # 指定 反向解析的nameif __name__ == '__main__':app.run()
转载于:https://www.cnblogs.com/big-handsome-guy/p/8539096.html
Flask 的路由系统 FBV 与 CBV相关推荐
- Flask中路由系统以及蓝图的使用
一.Flask的路由系统 1.@app.route()装饰器中的参数 methods:当前URL地址,允许访问的请求方式 @app.route("/info", methods=[ ...
- Flask入门(4):CBV和FBV
目录 4.CBV和FBV 4.1 继承 views.View 4.2 继承 views.MethodView 4.CBV和FBV 前面的例子中,都是基于视图函数构建视图(FBV),和Django一样, ...
- Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)
阅读目录 一.路由层:(Django的路由系统) 二.伪静态网页和虚拟环境: 三.FBV与CBV.JsonResponse.文件上传 一.路由层:(Django的路由系统) URL配置(Django项 ...
- django之路由分组,路由分发,FBV,CBV,ORM框架
今日的内容: a. 路由系统1. 创建app2. 路由的分组3. 路由的分发- 正则表达式匹配b. django的orm(模型model)1. 创建模型的步骤2. orm基本的增删改查3. 正向查询和 ...
- django之视图系统 views.py--主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)...
django之视图系统 views.py-->主要内容(FBV和CBV.dispath.request对象和request.FILES.JsonResponse) 一个视图函数(类),简称视图, ...
- 深入理解Flask路由(2)- werkzeug 路由系统
本系列共三篇文章: 深入理解Flask路由的实现机制 深入理解Flask路由(2)- werkzeug 路由系统 深入理解Flask路由 (3) - 动态 url 及转换器 上一篇我们说到:Flask ...
- day64 url用法以及django的路由系统
此篇博客是以备后查的,用到的时候记得过来查找即可! 路由系统:就是我们的django项目创建的时候自带的那个urls.py 它本身里面是映射的对应关系,一个大的列表里面,一个个元祖,元祖里面是url或 ...
- django请求生命周期,FBV和CBV,ORM拾遗,Git
一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post ...
- python 全栈开发,Day84(django请求生命周期,FBV和CBV,ORM拾遗,Git)
一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post ...
- python flask 路由_python框架之Flask(2)-路由和视图Session
路由和视图 这一波主要是通过看源码加深对 Flask 中路由和视图的了解,可以先回顾一下装饰器的知识:[装饰器函数与进阶] 路由设置的两种方式 #示例代码 from flask importFlask ...
最新文章
- 你还在这样学习Python吗?真的不可以
- 2G---5G与未来天线技术
- python 类-python 类如何使用
- sql存储过程的创建
- Android Stdio 里的 SQLite数据库 刷新和保存
- Swagger-概述
- LiveVideoStack Meet回归北京站:未来会更卷吧?
- php读取csv指定行_PHP快速读取CSV大文件指定行
- Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)
- .Net转Java自学之路—基础巩固篇二十(Lambda)
- Java基础(七)——文件、IO流
- 编程的一些经历和感想
- Windows 7 God Mode
- s深度linux没有ll等命令的解决办法
- 网页特效——花间飞舞的蝴蝶
- python sorted排序原理_python的sorted排序详解
- 7 年 Python 的我,总结了这 90 条写 Python 程序的建议
- java实现日历打印
- 【渝粤教育】电大中专电商运营实操 (4)作业 题库
- Django 编写您的第一个Django应用
热门文章
- 水面反光如何拍摄_如何抓拍水的不同瞬间
- WINDOWS 服务端 SVN自动部署/一键批处理 SVN 更新项目
- Android 控件 之 菜单(Menu)
- 阶段3 2.Spring_02.程序间耦合_7 分析工厂模式中的问题并改造
- 对GUID的一点探讨
- 跨站脚本攻击(反射型xss)笔记(一)
- Linux篇---Grep和正则匹配
- 最小化安装CentOS-7-x86_64-Minimal-1511图文教程
- nginx root alias 文件路径配置
- Centos7系统中安装JDK、Tomcat、Mysql