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 ...
随机推荐
- Django文件夹
Django文件 App文件夹 migrations文件 生成models创建表的翻译语句 telemplatetags文件夹 telemplatetags文件夹下的文件专门用来创建自定义标签.自定义 ...
- VSCode配置Go插件和第三方拓展包
前言 VSCode现在已经发展的相当完善,很多语言都比较推荐使用其来编写,Go语言也一样,前提你电脑已经有了Go环境和最新版本的VSCode 插件安装 直接在拓展插件中搜索Go,就可以安装Go插件 安 ...
- maven打包忽略test文件夹
当在项目中的test中写了单元测试后,在mvn install打包时会自动进行所有单元测试,所以这时需要忽略test文件夹 有两种方法: 1.用命令的方式:mvn install -Dmaven.te ...
- Oracle体系结构中基本概念,数据库
在Oracle体系结构中包含了基本概念即Oracle数据库与实例,如果你想要了解Oracle体系结构的话,你就必须要了解这两个基本的概念,以下是文章的具体介绍,望你浏览完以下的内容会有所收获. 数据库 ...
- bugku 想蹭网先解开密码
首先下载文件 然后 创建密码字典:使用命令 crunch 11 11 -t 1391040%%%% -o password.txt 爆破:使用命令 aircrack-ng -a2 所下载文件的地址 - ...
- Keep-Alive 以及服务器心跳
Keep-Alive 来源 :http://www.nowamagic.net/academy/detail/23350305 服务器心跳 来源 :http://www.cnblogs.com/lw ...
- 转载:TDM协议
转自http://www.wangdali.net/i2s/ 1. PCM简介 PCM (Pulse Code Modulation) 是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法.图 ...
- pytorch save model + Gmatch4py + jupyter debugger + community structure
1. pytorch, 使用训练好的模型测试自己图片 2. [ pytorch ] ——基本使用:(2) 训练好的模型参数的保存以及调用 3. Gmatch4py 4. Network Analysi ...
- AcWing 8.二维费用的背包问题
#include<iostream> #include<algorithm> #include<cstring> using namespace std ; ; i ...
- day14 tar
04. 系统中如何对文件进行压缩处理 压缩的命令 tar 压缩命令语法: tar zcvf /oldboy/oldboy.tar.gz 指定要压缩的数据文件 z 压缩的方式 为zip c 创建压缩包文 ...