Flask中路由系统以及蓝图的使用

一、Flask的路由系统

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

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

@app.route("/info", methods=["GET", "POST"])
def student_info():stu_id = int(request.args["id"])return f"Hello Old boy {stu_id}"  #格式化输出

  

  endpoint:反向RUL地址,默认位视图函数名(url_for)

from flask import url_for@app.route("/info", methods=["GET", "POST"], endpoint="r_info")
def student_info():print(url_for("r_info"))  # /infostu_id = int(request.args["id"])return f"Hello Old boy {stu_id}"  # 格式化输出

  

  defaults:视图函数的参数默认值

from flask import url_for@app.route("/info", methods=["GET", "POST"], endpoint="r_info", defaults={"nid": 100})
def student_info(nid):print(url_for("r_info"))  # /info# stu_id = int(request.args["id"])print(nid)  # 100return f"Hello Old boy {nid}"  # Python3.6的新特性 f"{变量名}格式化输出"

  

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

# 访问地址 : /info 
@app.route("/info", strict_slashes=True)
def student_info():return "Hello Old boy info"# 访问地址 : /infos  or  /infos/
@app.route("/infos", strict_slashes=False)
def student_infos():return "Hello Old boy infos"

 

  redirect_to:url地址重定向

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

  

  subdomain:子域名前缀subdomian=“wurenxiansheng”这样写可以得到wurenxiansheng.bokeyuan.com前提是app.config["SERVER_NAME"]="bokeyuan.com"

app.config["SERVER_NAME"] = "bokeyuan.com"@app.route("/info",subdomain="wurenxiansheng")
def student_info():return "Hello wurenxiansheng info"# 访问地址为: wurenxiansheng.bokeyuan.com/info

 

  2.动态参数路由:

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/2return f"Hello Old boy {nid}"  # Python3.6的新特性 f"{变量名}"

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

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

  

  3.Flask初始化配置

app = Flask(__name__)
app.template_folder = "templates"    #指定模板存放路径
app.static_folder = "文件夹名字"    #指定静态文件的存放路径
app.static_url_path = "/static"    # 指定静态文件访问路径
static_host = None    #静态文件的存放服务器

 

  4.Flask对象配置

  查看默认配置及配置项

app.config == app.default_config

  我们可以把关于Flask的一些配置,单拎出来创建一个独立的类或者文件用来存放用的时候直接导入,但是要记住用app.config.from_object(Obj)引入配置文件

class FlaskSetting(object):DEBUG = True    #打开Flask的debug模式

app.config.from_object(FlaskSetting)

 

二、Flask中的蓝图

  1.初始Flask蓝图(blueprint)

  把Blueprint理解为不能被run的Flask对象

  创建一个项目然后将目录结构做成如下(这是一个简单的对于数据的增删改查):

  

  static:存放静态文件

  templates:存放html文件

  views:存放视图文件也就是咱们的蓝图(blueprint)

  mysetting.py:关于Flask的一些配置

 

  我们只看一个查看的功能走一下流程

  views中的select.py文件中的内容:

from flask import Blueprint,render_templatestudent = [{"name":"小霞","age":"18","gender":""},{"name":"小红","age":"17","gender":""},{"name":"小明","age":"20","gender":""},{"name":"小亮","age":"19","gender":""},{"name":"小兰","age":"21","gender":""},
]list_student = Blueprint("list_student",__name__)
@list_student.route("/user_list",methods=["GET","POST"])
def user_list():return render_template("userlist.html",student_list=student)

 

  userlist.html文件中的内容:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title></title><!-- Bootstrap -->
</head>
<body>
<a href="">添加学生信息</a>
<table border="1px"><thead><tr><th>名字</th><th>性别</th><th>年龄</th><th>操作</th></tr></thead><tbody>{% for student in student_list %}<tr><td>{{ student.name }}</td><td>{{ student.gender }}</td><td>{{ student.age }}</td><td><a href="">删除</a><a href="">编辑</a></td></tr>{% endfor %}</tbody>
</table>
</body>
</html>

 

  manager.py文件中的内容:

from app01 import create_app
app = create_app()
if __name__ == '__main__':app.run(debug=True)

 

  app01中的__init__.py中的内容:

from flask import Flask
from app01.views import selectdef create_app():app = Flask(__name__)app.register_blueprint(select.list_student)return app

 

  蓝图内部的视图函数及route不要出现重复

转载于:https://www.cnblogs.com/guchenxu/p/10698931.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js高级第五天

课程回顾&#xff1a; ​ 原型链&#xff1a;由原型构成链状结构&#xff0c;提供成员查找机制 ​ 继承&#xff1a;组合继承&#xff1a;构造函数和原型对象 ​ 属性&#xff1a;调用父构造函数的时候用call改变this指向 ​ 方法&#xff1a;父实例对象赋值给子原型对象&a…

d3.js 制作简单的贪吃蛇

d3.js是一个不错的可视化框架&#xff0c;同时对于操作dom也是十分方便的。今天我们使用d3.js配合es6的类来制作一个童年小游戏–贪吃蛇。话不多说先上图片。 1. js snaker类 class Snaker {constructor() {this._size 30;this._len 3;this._width 900;this._height 690;th…

js高级第六天

Q课程回顾&#xff1a; ​ 闭包&#xff1a;有权访问另外一个函数的局部变量的函数&#xff0c;作用&#xff1a;延伸变量使用范围 ​ mdn&#xff0c;w3c function fn1 () {var n 3;return function () {console.log(n);} }​ 递归&#xff1a;函数调用其本身 function f…

Chrome 75 lazy-loading

Chrome 75 & lazy-loading https://addyosmani.com/blog/lazy-loading/ https://chromestatus.com/feature/5645767347798016 Chrome 75 将默认启用延迟加载功能 自 Chrome 75 起&#xff0c;将原生支持图片的延迟加载&#xff0c;在代码中编写 <img loading"lazy&…

d3.js 实现烟花鲜果

今天在d3.js官网上看到了一个烟花的DEMO&#xff0c;是canvas制作的&#xff0c;于是我想用d3.js来实现它&#xff0c;js代码只有几行。好了废话不多说&#xff0c;先上图。 1 js 类 因为烟花要有下落的效果&#xff0c;所以里面用到了一些简单的数学和物理知识来模拟重力&…

阿里Sentinel控制台源码修改-对接Apollo规则持久化

改造背景 前面我们讲解了如何对接Apollo来持久化限流的规则&#xff0c;对接后可以直接通过Apollo的后台进行规则的修改&#xff0c;推送到各个客户端实时生效。 但还有一个问题就是Sentinel控制台没有对接Apollo&#xff0c;Sentinel控制台本来就可以修改限流的规则&#xff0…

Python学习(一)

一、版本&#xff1a; Python2.X /Python3.x 官方宣布2020 年 1 月 1 日&#xff0c; 停止 Python 2 的更新。 Python3.x不兼容Python2.x  二、安装&#xff08;以mac 为例&#xff09; MAC 系统一般都自带有 Python2.x版本 的环境&#xff0c;你也可以在链接 https://www.py…

jQuery—淘宝精品服饰案例

<body><div class"wrapper"><ul id"left"><li><a href"#">女靴</a></li><li><a href"#">雪地靴</a></li><li><a href"#">冬裙</a>&l…

Python机器学习实践:决策树判别汽车金融违约用户

文章发布于公号【数智物语】 &#xff08;ID&#xff1a;decision_engine&#xff09;&#xff0c;关注公号不错过每一篇干货。 转自 | 法纳斯特&#xff08;公众号ID:walker398&#xff09; 作者 | 小F 决策树呈树形结构&#xff0c;是一种基本的回归和分类方法。 决策树模型的…

jQuery—tab栏切换

<div class"tab"><div class"tab_list"><ul><li class"current">商品介绍</li><li>规格与包装</li><li>售后保障</li><li>商品评价&#xff08;50000&#xff09;</li><l…

操作系统原理之I/O设备管理(第六章上半部分)

一、I/O系统的组成 I/O系统不仅包括各种I/O设备&#xff0c;还包括与设备相连的设备控制器&#xff0c;有些系统还配备了专⻔⽤ 于输⼊/输出控制的专⽤计算机&#xff0c;即通道。此外&#xff0c;I/O系统要通过总线与CPU、内存相连。 I/O系统的结构&#xff1a; I/O设备的分类…

操作系统原理之I/O设备管理(第六章下半部分)

五、I/O软件原理 输入输出软件的总体目标是将软件组织成一种层次结构 低层软件用来屏蔽硬件的具体细节高层软件则主要是为用户提供一个简洁、规范的界面设备管理的4个层次&#xff1a; 用户层软件 -》向系统发出I/O请求&#xff0c;显示I/O操作的结果&#xff0c;提供⽤户与设备…

切换Debug/Release编译模式和Archive的作用

&#xfeff;在学这个之前&#xff0c;以为很难&#xff0c;也起不到什么作用&#xff0c;但是等真正运用到工程里面&#xff0c;才发现&#xff0c;这个能帮你省下很多工作量。 1&#xff0c;Debug和Release版本区别&#xff1f; 进行iOS开发&#xff0c;在Xcode调试程序时&am…

AFNetworking 对数据进行https ssl加密

参考来源&#xff1a;http://www.cnblogs.com/jys509/p/5001566.html 现在在工作中的工作需求&#xff1a;https请求验证证书一般来讲如果app用了web service , 我们需要防止数据嗅探来保证数据安全.通常的做法是用ssl来连接以防止数据抓包和嗅探其实这么做的话还是不够的 。…

数据库系统原理(第一章概述)

一、数据库基本概念 什么是数据&#xff1a;数据&#xff08;Data&#xff09;是描述事物的符号记录&#xff0c;是指利用物理符号记录下来的、 可以鉴别的信息。 数据是信息存在的一种形式&#xff0c;只有通过解释或处理的数据才能成为有用的信息。 什么是数据库&#xff1a;…

实验二:Linux下Xen环境的安装

实验名称&#xff1a; Linux下Xen环境的安装&#xff08;centOS7&#xff09; 实验环境&#xff1a; 本次实验基本是在centOS7的环境下完成&#xff0c;系统内核和系统版本如下&#xff1a; 实验要求&#xff1a; 为centOS7的环境下安装Xen的平台&#xff0c;能够正常使用Xen下…

IDEA写vue项目出现红色波浪线警告如何解决??

1.看图 2.希望对大家有帮助&#xff0c;只要修改了这个就可以&#xff0c;如有任何问题都可以留言&#xff0c;谢谢大家 2019-09-1923:54:11 作者&#xff1a;何秀好 转载于:https://www.cnblogs.com/itboxue/p/11553395.html

数据可视化(BI报表的开发)第一天

课程回顾&#xff1a; ​ jQuery事件注册&#xff1a; ​ $(元素).click(function () {}); ​ $(元素).on(‘click’, [后代元素], function () {}); ​ $(元素).one(‘click’, function () {}); ​ 解绑事件&#xff1a;off ​ 自动触发&#xff1a; ​ $(元素).click…

在Block中使用weakSelf与strongSelf的意义

在Block中使用weakSelf与strongSelf的意义 我们都会声明一个弱引用在block中使用, 目的就是防止循环引用, 那么weakSelf与strongSelf一起使用目的是什么呢? 首先先定义2个宏: #define YXWeakSelf(type) __weak typeof(type) weak##type type; #define StrongSelf(type) __…

操作系统原理之操作系统简介(第一章)

一、 什么是操作系统 操作系统&#xff1a;是一种复杂的系统软件&#xff0c;是不同程序代码、数据结构、数据初始化文件的集合&#xff0c;可执行。 操作系统是用户与硬件之间的接口&#xff1a;操作系统与硬件部分相互作用&#xff0c;并且为运行在计算机上的应用程序提供执行…