Flask 学习之 路由
一.路由的基本定义
# 指定访问路径为 demo1
@app.route('/demo1')
def demo1():
return 'demo1'
二.常用路由设置方式
@app.route('/user/<username>') #常用的 不加参数的时候默认是字符串形式的
@app.route('/post/<int:post_id>') #常用的 #指定int,说明是整型的
@app.route('/post/<float:post_id>')
@app.route('/post/<path:path>')
@app.route('/login', methods=['GET', 'POST'])
三.路由可以设置传递参数, 2种方式
1.一种为路由传递参数[没有限定类型]
2.路由传递参数[限定数据类型]
以下为相应的例子:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "hsz" from flask import Flask app = Flask(__name__) # 加载项目配置
# 配置类
class Config(object):
DEBUG = True app.config.from_object(Config) # 路由传递参数[没有限定类型]
@app.route('/user/<user_id>')
def user_info_1(user_id):
return 'hello info_1 %s' % user_id # 路由传递参数[限定数据类型],列子是用了int类型,可以选择bool,float都可以的
# user_id 必须是整数
@app.route('/user/<int:user_id>')
def user_info_2(user_id):
return 'hello info_2 %d' % user_id if __name__ == '__main__':
app.run(host='127.0.0.1', port=9000)
"""
测试说明:
测试1:
http://127.0.0.1:9000/user/qwer
这样的情况是访问了函数1的url,因为qwerb不为整数,所以路由到没有限定类型处
测试2:
http://127.0.0.1:9000/user/2
这样的情况下会选择有限定类型的路由
测试3:
注释限定的,让后使用如下url测试:
http://127.0.0.1:9000/user/2
这样会走无限定的路由
"""
四.路由之url_for()函数
1.给指定的函数构造URL
#例1:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "hsz" from flask import Flask, url_for
from flask import redirect app = Flask(__name__) @app.route('/index') # endpoint是别名
def home():
"""
url_for是个函数接受视图函数的名字(字符串形式)作为参数,返回视图函数对应的url
通过url_for home 来获取前端输入的url是什么
:return:
"""
v = url_for("home")
print(v)
return "index" # url_for() 使用endpoint ,通过反向机制构建URL路径
@app.route('/index/<int:nid>', endpoint="aaa") # endpoint是别名
def zzz(nid):
"""
这边使用了别名,将zzz函数别名为aaa
所以url_for 对的是aaa
:param nid:
:return:
"""
v = url_for("aaa", nid=nid)
print(v)
return "index2" if __name__ == '__main__':
app.run(host='127.0.0.1', port=9000)
2.访问静态文件(CSS / JavaScript 等)
只要在你的包中或是模块的所在目录中创建一个名为 static 的文件夹,在应用中使用 /static 即可访问。
url_for('static', filename='style.css')
这个文件应该存储在文件系统上的 static/style.css
五.路由的正则匹配方式
1.自定义转换器实现
在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,根据自己的规则去限定请求参数再进行访问
具体实现步骤为:
(1)导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录
(2)自定义转换器:自定义类继承于转换器基类
(3)添加转换器到默认的转换器字典中
(4)使用自定义转换器实现自定义匹配规则
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "hsz" # 下面编写一个自定义路由转换器 from flask import Flask app = Flask(__name__) # 导入转换器基类
from werkzeug.routing import BaseConverter class MobileNumberConverter(BaseConverter):
"""
手机号码的自定义路由转换器
"""
regex = "\d{11}" # 添加转换器到默认的转换器字典中,并指定转换器使用时名字为: mobile
app.url_map.converters['mobile'] = MobileNumberConverter # 使用转换器去实现自定义匹配规则
@app.route(r"/sms/<mobile:mobile_number>/") # mobile_number就是测试的电话号码
def sms(mobile_number):
"""
通过以下url访问:
http://127.0.0.1:9000/sms/13666666666/
:param mobile_number:
:return:
"""
print(mobile_number)
return "手机号通过,短信" # 例2
class RegexConverter(BaseConverter):
"""正在路由转换器""" def __init__(self, url_map, *args):
# super().__init__(url_map) # 或者这样写
# url_map 所有url组成的元组
super(RegexConverter, self).__init__(url_map) # 初始化分类
self.regex = args[0] # 是一个元组 app.url_map.converters['reg'] = RegexConverter # \w 表示大写字母小写字母下划线
@app.route(r"/register/<reg('\w{4,6}'):username>/")
def reg(username): # 这个函数名没有限制
"""
通过以下url访问:
http://127.0.0.1:9000/register/qwer/
:param username:
:return:
"""
print(username)
return "ok reg" if __name__ == "__main__":
app.run(host='0.0.0.0', port=9000)
2.系统自带转换器
在werkzeug.routing.py源文件中
DEFAULT_CONVERTERS = {
"default": UnicodeConverter,
"string": UnicodeConverter,
"any": AnyConverter,
"path": PathConverter,
"int": IntegerConverter,
"float": FloatConverter,
"uuid": UUIDConverter,
}
以上类型都是系统自带的。
系统自带的转换器具体使用方式在每种转换器的注释代码中有写,请留意每种转换器初始化的参数。
Flask 学习之 路由的更多相关文章
- Flask 学习(二)路由
Flask 路由 在说明什么是 Flask 路由之前,详细阐述下 Flask “Hello World” 这一 最小应用的代码. Flask “Hello World” from flask imp ...
- Flask 学习目录
Flask 学习目录 Flask 的学习过程是一个了解如何从单个模块搭建一个 Web 框架的过程. Python.Flask 的安装和设置 简单的 Hello World 程序 使用 Jinjia2 ...
- Python Flask学习笔记之Hello World
Python Flask学习笔记之Hello World 安装virtualenv,配置Flask开发环境 virtualenv 虚拟环境是Python解释器的一个私有副本,在这个环境中可以安装私有包 ...
- Flask 学习(三)模板
Flask 学习(三)模板 Flask 为你配置 Jinja2 模板引擎.使用 render_template() 方法可以渲染模板,只需提供模板名称和需要作为参数传递给模板的变量就可简单执行. 至于 ...
- Flask(2)- 装饰器的坑及解决办法、flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件、重定义错误页面)
一.装饰器的坑以及解决方法 1.使用装饰器装饰两个视图函数,代码如下 from flask import Flask, redirect, render_template, request, sess ...
- [ZHUAN]Flask学习记录之Flask-SQLAlchemy
From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...
- 【Flask】Flask学习笔记(一) 应用基本结构
初始化 使用前必须创建一个应用实例 from flask import Flask app = Flask(__name__) 路由和视图函数 请求流程 客户端(web浏览器)--> web服 ...
- Python Flask学习笔记之模板
Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...
- Flask学习-Wsgiref库
一.前言 前面在Flask学习-Flask基础之WSGI中提到了WerkZeug,我们知道,WerkZeug是一个支持WSGI协议的Server,其实还有很多其他支持WSGI协议的Server.htt ...
随机推荐
- STL-vector-set_difference B - 人见人爱A-B
B - 人见人爱A-B 参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法运算.(当然,大 ...
- 如何在MacOS的VScode上安装Python3
由于MacOS上的VScode默认安装的Python版本是2.7,所以需要我们自己手动安装Python3从Python官网下载最新版本-安装-设置环境变量当然是可行的,但下面要介绍的是另外一种方式:H ...
- Ubuntu下vsc+python3配置
我发现直接搜这个很容易得到过时的文章py2请滚蛋好么 1.首先下去VSC官网下载.deb的安装包,安装好vsc,打开后安装PYTHON,reload下.别啊忘记修改路径,setting下搜python ...
- go语言 内置的椭圆数字签名及其验证算法
package main import ( "crypto/ecdsa" "crypto/elliptic" "crypto/rand" & ...
- vs2010安装
1.网盘上2010安装包可用,先下载到电脑上,然后找到setup文件,安装即可 2.下载插件,基本的文本对齐,tab键补齐等功能 3.测试hello world程序 4.出现的问题 一个文件夹下有多个 ...
- IntelliJ IDEA构建多Module项目
打开IDEA 创建完成项目后,我们创建子模块 可以看到common子模块创建成功,子模块的名字大家可以根据自己的实际需求来修改 下面我们再创建子模块 给子模块起个名字 现在已经创建好多模块的项目了,下 ...
- shiro认证和授权
一.shiro基础概念 Authentication:身份认证 / 登录,验证用户是不是拥有相应的身份: Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限:即判断用户 ...
- 剪切文件或目录命令 - mv
①.命令名称:mv ②.英文原意:move ③.命令所在路径:/bin/mv ④.执行权限:所有用户 ⑤.功能描述:剪切文件.改名 ⑥.语法: mv[原文件或目录][目标目录] 例子:在 tmp目录下 ...
- Idea实用小Tips
设置keymap 自己根据习惯选择keymap(键位) 插件安装 ###省去set.get方法以及基于注解的日志框架 lombok plugin ###找bug用的 FindBugs-IDEA ### ...
- ET框架之SceneChangeComponent
初始化事件 using ETModel; namespace ETHotfix { [Event(EventIdType.InitSceneStart)] public class InitScene ...