Flask路由+视图补充
一、路由设置的两种方法
1、装饰器
@app.route('/index/')
def index():
return 'Hello World!'
2、源码
route->decorator->add_url_rule(rule, endpoint, f, **options)
def index():
return 'Hello World!' app.add_url_rule('/index/', None, index)
注意:endpoint的值不能一致
二、参数
rule URL规则
view_func 视图函数名称
endpoint=None 名称,用于反向生成URL,即: url_for('名称')
methods=None 允许的请求方式,如:["GET","POST"]
strict_slashes=None 对URL最后的 / 符号是否严格要求,
redirect_to=None 重定向到指定地址 defaults=None 默认值,当URL中无参数,函数需要参数时,使用defaults={'k':'v'}为函数提供参数
subdomain=None, 子域名访问
endpoint、metods、前面有介绍
1、redirect_to 重定向
当访问rule时,重定向到目标网址
作用:网站升级维护时,用户通过此方法不用知道新网站的地址,就可以从旧网址跳到指定的网址
from flask import Flask
app = Flask(__name__)
@app.route('/index/', redirect_to='https://www.bootcss.com/')
def index():
return 'Hello World!'
# app.add_url_rule('/index/', None, index)
if __name__ == '__main__':
app.run()
2、strict_slashes
strict_slashes=Flask # 对url最后一个斜杠要求不严
3、子域名(了解)
from flask import Flask app = Flask(import_name=__name__)
app.config['SERVER_NAME'] = 'api.com:5000'
"""
127.0.0.1 api.com
127.0.0.1 web.api.com
127.0.0.1 admin.api.com """ # http://admin.api.com:5000/admin
@app.route("/admin", subdomain="admin")
def admin_index():
return "admin.your-domain.tld" # http://web.api.com:5000/
@app.route("/", subdomain="web")
def web_index():
return "web.your-domain.tld" # http://sdsdf.api.com:5000/
# http://sdfsdf.api.com:5000/
# http://asdf.api.com:5000/ @app.route("/dynamic", subdomain="<username>")
def username_index(username):
"""Dynamic subdomains are also supported
Try going to user1.your-domain.tld/dynamic"""
return username + ".your-domain.tld" if __name__ == '__main__':
app.run()
三、CBV(几乎不用)
from functools import wraps
from flask import Flask, views
app = Flask(__name__) #
def wrapper(func):
@wraps(func)
def inner(*args, **kwargs):
return func(*args, **kwargs) return inner #
class UserView(views.MethodView):
#
methods = ['GET']
decorators = [wrapper] def get(self, *args, **kwargs):
return 'GET' def post(self, *args, **kwargs):
return 'POST' #
app.add_url_rule('/user/', None, UserView.as_view('endpoint')) if __name__ == '__main__':
app.run()
四、自定义正则
from flask import Flask,url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__) # 步骤一:定制类
class RegexConverter(BaseConverter):
"""
自定义URL匹配正则表达式
""" def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex def 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 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)) # 4 <class 'int'>
print(url_for('index', nid=110)) # /index/110/
return "index" if __name__ == '__main__':
app.run()
Flask路由+视图补充的更多相关文章
- Flask路由&视图
1 路由 1.1app.url_map 查看所有路由 from flask import Flask app = Flask(__name__) @app.route('/') def hello_ ...
- flask路由和视图和cookie
什么是路由 """ 客户端(例如web浏览器)把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例. 程序实例需要知道对每个URL请求运行那些代码,所以 ...
- DRF 视图家族及路由层补充
目录 视图家族 一.views视图类 1.APIView类 2.GenericAPIView类(generics中) 二.mixins类:视图辅助工具 1.RetrieveModelMixin 2.L ...
- Flask路由系统
Flask路由系统 我们之前了解了路由系统是由带参数的装饰器完成的. 路由本质:装饰器和闭包实现的. 设置路由的两种方式 第一种: @app.route('/index') def index(): ...
- 一、Flask路由介绍
Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是So ...
- Flask之视图(一)
2.关于Flask 知识点 从Hello World开始 给路由传递参数 返回状态码 重定向 正则URL 设置cookie和获取cookie 扩展 上下文 请求钩子 Flask装饰器路由的实现 Fla ...
- Flask - 路由系统
目录 Flask - 路由系统 @app.route()装饰器中的常用参数 methods : 当前 url 地址,允许访问的请求方式 endpoint:反向url地址,默认为视图函数名(url_fo ...
- Flask ——路由系统
Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST" ...
- Laravel教程 二:路由,视图,控制器工作流程
Laravel教程 二:路由,视图,控制器工作流程 此文章为原创文章,未经同意,禁止转载. View Controller 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就 ...
随机推荐
- Linux内存页大小
当使用内存时, 记住一个内存页是 PAGE_SIZE 字节, 不是 4KB. 假定页大小是 4KB 并且 硬编码这个值是一个 PC 程序员常见的错误, 相反, 被支持的平台显示页大小从 4 KB 到 ...
- VUE框架思想
学习VUE的第一步就是先了解这个框架的的核心思想 Vue.js的核心思想就是,它是一套__渐进式的自底层向上增量开发__的__MVVM__结构的框架 什么是框架? 简单的讲,框架就是将与业务无关的重复 ...
- Jmeter配置元件——CSV DataSet Config参数化
在聊CSV DataSet Config配置元件前,先来讨论下为何要参数化? 比如在做性能测试过程中, 一般我们需要模拟多个用户进行操作, 为了满足实际场景, 模拟真实的用户行为, 我们需要做到模拟的 ...
- 【Docker】删除镜像
删除镜像:docker rmi [OPTIONS] IMAGE [IMAGE...] 1.删除所有未被 tag 标记和未被容器使用的镜像: docker image prune 2.删除所有未被容器使 ...
- 修改Samba密码后无法登录
Samba修改用户名密码后,无法登陆 之后每次进去都是以这样的username和passwd进去的,如何才能使用其他的用户来重新登录samba server呢? 首先使用在开始菜单里面输入cmd: 进 ...
- Iptables-linux服务器做路由转发
https://blog.csdn.net/liang_operations/article/details/80747510 实现内部服务器C可以经过服务器B进行上网. 3.1服务器双网卡,一块配置 ...
- TCP/IP DNS
1.概述 域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,提供主机名字和ip地址转换的选路信息,在应用的角度上,DNS的访问通过地址解析器(resolver)完成,在unix中,解 ...
- 016 Ceph的集群管理_2
一.Ceph集群的运行状态 集群状态:HEALTH_OK,HEALTH_WARN,HEALTH_ERR 1.1 常用查寻状态指令 [root@ceph2 ~]# ceph health deta ...
- $[NOIp2017]$ 宝藏 状压$dp$
\(Sol\) 觉得这里是个很巧妙的地方吖,就是记下当前扩展点集的最大深度,然后强制下一步扩展的点集都是最大深度+1.这样做在当前看可能会导致误算答案导致答案偏大,但是整个\(dp\)完成后一定可以得 ...
- $Noip2011/Luogu1314$ 聪明的质监员 二分+巧妙前缀和
$Luogu$ $Sol$ 首先$W$一定是某个$w_i$.于是一种暴力方法就出炉了,枚举$W$再计算. 注意到,满足$S-Y$的绝对值最小的$Y$只可能是两种,一种是$<S$的最大的$Y$,一 ...