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安装好了,这一篇教程我们就 ...
随机推荐
- 递归&时间模块&os模块
递归 递归调用 一个函数,调用了自身,称为递归调用 递归函数:一个会调用自身的函数称为递归函数 凡是循环能干的事,递归都能干 方式: 写出临界条件 找这一次和上一次的关系 假设当前函数已经能用,调用自 ...
- python实现单词本功能
#实现简单的单词本:# 可以添加单词和词义,当所添加的单词已经存在 让用户知道:# 查找单词,单词不存在时,让用户知道# 删除单词,当删除的单词不存在时,让用户知道# 以上功能无限制操作,直到用户输入 ...
- centos7 断电导致 generating /run/initramfs/rdsosreport.txt 问题
开机就进入命令窗口,窗口提示信息如下: generating “/run/initramfs/rdsosreport.txt” entering emergencymode. exit the she ...
- jeecg中自定义按钮时遇到的问题
- div3的e题有点水呀
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...
- 002 ceph的deploy部署
介绍:前期对ceph有一个简单的介绍,但是内容太大,并不具体,接下来使用ceph-deploy部署一个Ceph集群,并做一些运维管理工作,深入的理解Ceph原理及工作工程! 一.环境准备 本次使用的虚 ...
- 机器学习之路--Numpy
常用代码 ndarray.dtype 数据类型必须是一样的 常用代码 import numpy #numpy读取文件 world_alcohol = numpy.genfromtxt("wo ...
- C Primer Plus(二)
重读C Primer Plus ,查漏补缺 重读C Primer Plus,记录遗漏的.未掌握的.不清楚的知识点 分支和跳转 1.ctype.h头文件里包含了一些列用于字符判断的函数,包括判断数字.大 ...
- zabbix 4.04 安装文档 - 基于CentOS 7.6
1 安装前准备: 1.1 安装JDK 卸载openjdk # rpm -qa | grep java # yum remove java-1.8.0-openjdk # yum remove ...
- Java手写数组栈
public class ArrayStack{ private String[] items; //数组 private int count; //栈内元素 private int n; //栈大小 ...