基本用法

Django的路由系统url集中在一起,而Flask的路由系统以装饰器的形式装饰在视图上如:

@app.route("/",methods=["GET","POST"])

@app.route() 装饰器中的参数

第一个位置参数代表路由地址

methods : 当前 url 地址,允许访问的请求方式

以下例子包含部分request的方法取值

@app.route('/get_request', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
print(request.args.get('id')) # url中的数据
print(request.args.to_dict())
# 杂项
print('1>>>',request.url) # 整个访问地址
print('2>>>',request.values) # args和from所有的数据 这儿有深坑,不要用to_dict,
print('3>>>',request.path) # 路由地址
print('4>>>',request.base_url) # 最基础的url
print('5>>>',request.host) # 主机地址
print('6>>>',request.host_url) ## 两个特殊值
print(request.json) # 请求头:Content-type:application/json
print(request.data) # 当请求头 不被认可的情况 存放原始数据 b"" + Content-type:application/json 也会保留原始数据 return render_template('login.html')
else:
print(request.form.get('username')) # FormDate中的数据
print(request.form.to_dict()) # 以字典形式打印出来 return request.form.get('username', '错误')

endpoint : 反向url地址

from flask import url_for

@app.route("/info", methods=["GET", "POST"], endpoint="r_info")
def student_info():
print(url_for("r_info")) # /info
stu_id = int(request.args["id"])
return f"Hello {stu_id}" # Python3.6的新特性 f"{变量名}"

endpoint   默认是视图函数名 ,url_for 反向生成URL地址 ——可以解决视图函数重名:

@app.route("/detail",methods=["GET","POST"]) # route(detail) -> nei_func --> detail
@wai_func # wai_func(detail) -> nei_func --> deltail
def detail():
return render_template("detail.html") @app.route("/detail2",methods=["GET","POST"]) # route(detail) -> nei_func --> detail
@wai_func
def detail2():
return render_template("detail.html")

上面例子中,运行会报这样的错误

这是因为装饰器的机制会使两个路由都指向装饰器的内层函数nei_func ,就会出现函数重名的报错

如果加上endpoint就不会有这样的问题了

@app.route("/detail",methods=["GET","POST"],endpoint='detil') # route(detail) -> nei_func --> detail
@wai_func # wai_func(detail) -> nei_func --> deltail
def detail():
return render_template("detail.html") @app.route("/detail2",methods=["GET","POST"],endpoint='detil2') # route(detail) -> nei_func --> detail
@wai_func
def detail2():
return render_template("detail.html")

项目已经成功运行了

defaults : 视图函数的参数默认值{"nid":1}

传递默认参数 defaults={"nid":1} def index(nid)

strict_slashes

url地址结尾符"/"的控制 False : 无论结尾 "/" 是否存在均可以访问 , True : 结尾必须不能是 "/"

是否严格遵守URL地址规则 == True 在地址末尾不可以出现 / 反之可以

redirect_to : url地址重定向

永久重定向 "/infos" http 状态码 - 301  不走被装饰的视图

# 访问地址 : /info 浏览器跳转至 /infos
@app03.route("/info", strict_slashes=True, redirect_to="/infos")
def student_info():
return "Hello I'm info" @app03.route("/infos", strict_slashes=False)
def student_infos():
return "Hello I'm infos"

subdomain

子域名配置 必须和 app中的 SERVER_NAME 联动

子域名前缀 subdomian="DragonFire" 这样写可以得到 DragonFire.zwq.com 前提是app.config["SERVER_NAME"] = "zwq.com"

app.config["SERVER_NAME"] = "zwq.com"

@app.route("/info",subdomain="DragonFire")
def student_info():
return "Hello Old boy info" # 访问地址为: DragonFire.zwq.com/info

动态参数路由

from flask import url_for

# 访问地址 : http://127.0.0.1:5000/info/1
@app.route("/info/<int:nid>", methods=["GET", "POST"], endpoint="r_info")
def student_info(nid):
print(url_for("r_info",nid=2)) # /info/2
return f"Hello {nid}"

<int:nid> 就是在url后定义一个参数接收

但是这种动态参数路由,在url_for的时候,一定要将动态参数名+参数值添加进去,否则会抛出参数错误的异常

添加路由的另一种方法

通过分析源码得知添加路由本质上就是这种方法:add_url_rule("/login",view_func=login)
所以可以直接通过add_url_rule()添加路由
def login():
print(url_for("my_home_page"))
# print(url_for("index2"))
return "" app.add_url_rule("/login",view_func=login) # 第二种添加路由的方式,本质不变
 
 

Flask 中的路由系统的更多相关文章

  1. 第六篇 Flask中的路由系统

    Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST" ...

  2. Flask(2)- 装饰器的坑及解决办法、flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件、重定义错误页面)

    一.装饰器的坑以及解决方法 1.使用装饰器装饰两个视图函数,代码如下 from flask import Flask, redirect, render_template, request, sess ...

  3. Django中的路由系统:urls

    Django的路由系统 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是以这种方式告诉Django,对于这个URL调用 ...

  4. django 中的路由系统(url)

    路由系统 根据Django约定,一个WSGI应用里最核心的部件有两个:路由表和视图.Django框架 的核心功能就是路由:根据HTTP请求中的URL,查找路由表,将HTTP请求分发到 不同的视图去处理 ...

  5. Flask中的路由、实例化参数和config配置文件

    Flask中的路由 endpoint 别名不能重复,对应的视图函数,默认是视图函数名.endpoint 才是路由的核心.视图函数与路由的对应关系.可以通过url_for 反向创建url # metho ...

  6. 11.2 Flask 配置文件,路由系统

    配置文件系统 构建 Flask 应用时指定 app = Flask( __name__, template_folder = '', # 指定存储模板文件夹名称 static_url_path = ' ...

  7. Flask配置文件和 路由系统

    debug = True开启debug模式 当你的代码在界面增减之后不用刷新界面自动更新 app.logger.error("这是error模式") app.logger.info ...

  8. MVC3中的路由系统(Routes)

    转载:http://blog.csdn.net/francislaw/article/details/7429317 MVC中,用户访问的地址并不映射到服务器中对应的文件,而是映射到对应Control ...

  9. ASP.NET MVC3中的路由系统 Routes

    MVC中,用户访问的地址并不映射到服务器中对应的文件,而是映射到对应Control里对应的ActionMethod,由ActionMethod来决定返回用户什么样的信息.而把用户访问的地址对应到对应的 ...

随机推荐

  1. 20165304第4次实验《Android程序设计》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:李松杨 学号:20165304 指导教师:娄嘉鹏 实验日期:2018年5月14日 实验时间:15:35 - 17:15 实验序号:实验 ...

  2. 深度学习原理与框架-Alexnet(迁移学习代码) 1.sys.argv[1:](控制台输入的参数获取第二个参数开始) 2.tf.split(对数据进行切分操作) 3.tf.concat(对数据进行合并操作) 4.tf.variable_scope(指定w的使用范围) 5.tf.get_variable(构造和获得参数) 6.np.load(加载.npy文件)

    1. sys.argv[1:]  # 在控制台进行参数的输入时,只使用第二个参数以后的数据 参数说明:控制台的输入:python test.py what, 使用sys.argv[1:],那么将获得w ...

  3. cdnbest 节点和主控连接不上原因主要查看几点

    1. 注意安装过程中有没有报错,如果没有报错,检查下节点程序是否有运行,本例以linux系统为例,windows系统可以查看进程管理器 有以下进程说明程序是运行成功的 ps -aux |grep ka ...

  4. (转)Flask框架+mySQL数据库:误删migrations文件夹后再次创建时遭遇错误(Can't locate revision identified by ‘xxx’)

    转自:(http://blog.csdn.net/Super_Tiger_Lee/article/details/77772752) 1.模型初始化环境: 命令:python manage.py db ...

  5. mybatis-generator 覆盖新增XML

    参考文章:https://www.cnblogs.com/xxoome/p/10068780.html 1.添加依赖(版本1.3.7) plugin> <groupId>org.my ...

  6. Zabbix告警脚本-短信

    [root@iot-svndata02 bin]# cat zbsms.sh #!/bin/sh #curl http://221.179.180.137:8080/smsaServer/lkSend ...

  7. C++重写(覆盖)、重载、重定义、

    总结: 重写(覆盖)override 是指派生类函数重写(覆盖)基类函数 不同的范围,分别位于基类和派生类中 函数的名字相同 参数相同 基类函数必须有virtual关键字 重载overload 成员函 ...

  8. python 函数编程

    def test1(): print('in the test1') def test2(): print('in the test2') return 1 def test3(): print('i ...

  9. Centos7+hadoop2.7.3+jdk1.8

     修改主机名 1.       修改主机名 vi /etc/sysconfig/network ,改为 master , slave1 , slave2 2.       source /etc/sy ...

  10. 查找 管道 exec

    #查找150天为使用的文件并列出find -type f -mtime +150 -exec ls -ltr {} \;#查找150天内120外的文件find -type f -mtime -150 ...