1,flask中的路由

  • endpoint-url_for反向地址
  • endpoint默认是视图函数名endpoint="雪雪"
  • methods 指定视图函数的请求方式,默认GET
  • default={"nid":1}指定视图函数的默认值
  • strict_slashes = False 是否严格遵循路由规则/login/
  • redirect_to"/xueren/" 永久跳转地址301
  • 动态路由参数
  • /<int:nid> / <string:str> / <nid>
  • 视图函数中需要有参数接收动态参数

2,Flask中的实例化配置

  • template_folder = "temp"  # template模板目录,默认当前项目中的template目录
  • static_folder = "xuexue"目录
  • static_url_path= "/static"   # 访问路径
  • host_matching = False  # 如果不是特别需要,慎用,否则所欲的route都需要host=""参数
  • subdomain_matching = False  # 理论上来说是用来限制SERVER_NAME子域名,
  • instance_path = None.  # 指向另一个Flask实例的路径
  • instance_relative_config = Flase  # 是否加载另一个实例的配置
  • root_path = None  # 主模块所在的目录绝对路径,默认项目目录

3,app对象配置

  • app.config.from_object(Debug)
  • class Debug(object):
    • DEBUG = true

4,Blueprint

  • from flask import Blueprint
  • blue = Blueprint("blue_id", __name__,url_prefix="user"每次访问蓝图的路径前缀)
  • app.reguster_blueprint(blue)

5,特殊装饰器:

  • @app.template_global()
  • @app.template_filter()
  • @app.before_request      # 请求进入视图函数之前
  • @app.after_request
  • def af1(response)
    • return response        # 结束视图函数之后, 返回客户端之前
  • 正常:be1---be2---be3---af3---af2---af1
  • 异常:be1---af3---af2---af1
  • @app.errorhandler(404)重定义页面
  • def error404(args):
    • return args
  • 基于蓝图实现增删改查数据,基于Before_request session实现用户校验,可选errorhandler

具体代码如下:

蓝图代码:

from flask  import Flask, request, render_template, redirect, session
from serv import users
import weishenme
app = Flask(__name__, static_url_path="/static") # 注册配置类
app.config.from_object(weishenme.Debug) # 注册蓝图
app.register_blueprint(users.user_blue) @app.route("/detail")
def detail():
return render_template("detail.html") @app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "GET":
return render_template("login1.html")
else:
session["user"] = request.form.get("user")
return redirect("/") @app.route("/")
def xiaocai():
return "骚帆是一根小菜" if __name__ == '__main__':
app.run(debug=True)

配置类:

class Debug(object):
DEBUG=True
SECRET_KEY="xuexue"
SESSION_COOKIE_NAME="xiaoxue" class Testing(object):
TESTING=True
SECRET_KEY="xiaopangpang"
SESSION_COOKIE_NAME="xueer" class Production(object):
SECRET_KEY="xueren"
SESSION_COOKIE_NAME="csrf_token"

app的代码:

from flask import Flask, session, redirect, url_for, render_template, request
import weishenme
# 实例化一个Flask对象app
app = Flask(__name__) # __name__表示是当前目录
# 指定session的key是xuexue
app.secret_key = "xuexue" # 注册配置类
# app.config.from_object(weishenme.Debug)
app.config.from_object(weishenme.Testing) # 装饰器
def outer(func):
def hahaha(*args, **kwargs):
if session["user"]:
print(session["user"])
ret = func(*args, **kwargs)
return ret
else:
return redirect("/login")
return hahaha @app.route("/<nid>", endpoint="wc", methods=["GET", "POST"])
@outer
def wc(nid):
print(nid)
return render_template("xuexue.html") @app.route("/detail", endpoint="detail")
@outer
def detail():
print("detail")
return render_template("detail.html") @app.route("/login", methods=["GET", "POST"], strict_slashes=False)
def login():
if request.method == "GET":
return render_template("login1.html")
else:
session["user"] = request.form.to_dict().get("user")
return redirect("/miss") if __name__ == '__main__': # 运行这个flask项目
app.run(host="0.0.0.0", port=2018)

请求执行流程代码:

from flask import Flask, request, session, render_template, redirect, session
import weishenme
from serv import users app = Flask(__name__, static_folder="static_list", static_url_path="/static")
# 到瑞配置类
app.config.from_object(weishenme.Debug)
# 注册蓝图
app.register_blueprint(users.user_blue) @app.before_request
def is_login():
print("b1")
if request.path == "/login" :
return None
elif session.get("user"):
return None
else:
return redirect("/login") @app.before_request
def b2():
print("b2")
return None @app.before_request
def b3():
print("b3")
return None @app.after_request
def af1(res):
print("af1")
return res @app.after_request
def af2(res):
print("af2")
return res @app.after_request
def af3(res):
print("af3")
return res @app.route("/", endpoint="index",methods=["POST", "GET"])
def index():
return render_template("index1.html") @app.route("/detail", endpoint="detail")
def detail():
return render_template("detail.html") @app.route("/login", methods=["GET", "POST"], strict_slashes=False)
def login():
if request.method == "GET":
return render_template("login1.html")
else:
print("xiaoxue")
session["user"] = request.form.get("user")
return redirect("/") @app.errorhandler(404)
def error(args):
print(args)
return "您访问的页面不存在,或者走丢了.....%s" % args if __name__ == '__main__':
app.run(debug=True)

  

flask的路由配置,特殊装饰器的更多相关文章

  1. flask 第三章 特殊装饰器 CBV Flask-Session WTForms

    1.flask中的特殊装饰器 前面我们讲过的装饰器函数中,用来登录验证,这次我们来介绍几个flask中的特殊装饰器 1). @app.before_request 具体的用途是: 在请求进入视图函数之 ...

  2. Flask蓝图Blueprint和特殊装饰器

    Flask 中的 蓝图 Blueprint 不能被run的flask实例:相当于django中的app01 应用 蓝图作用:功能隔离 路由隔离 Blueprint就是 一个不能run的flask 蓝图 ...

  3. Django drf:视图层封装、ViewSetMixin、路由配置、解析器、响应器

    一.视图层封装 二.ViewSetMixin 三.路由配置 四.解析器 五.响应器 一.视图层封装 1.基本视图 写一个出版社的增删改查resfull接口 路由: url(r'^publish/$', ...

  4. Flask中那些特殊的装饰器

    模板相关的装饰器 @app.template_global() 用法: @app.template_global() # 记得加括号 def jiafa(a, b): # 这个方法每调用一次就需要传一 ...

  5. flask+blueprint路由配置

    1.flask默认的静态文件和html文件在app应用文件夹里的相应文件夹下:app // Flask||--static ||--templates |静态文件默认的url地址为:url_prefi ...

  6. tornado 第二种路由方法(装饰器)

    #!/usr/bin/env python # _*_coding:utf-8 _*_ import tornado.ioloop import tornado.web application = t ...

  7. Flask需要登录权限的装饰器写法

    def wapper(func): def inner(*args,**kwargs): if not request.cookies.get("username"): retur ...

  8. python装饰器 语法糖

    简介: 装饰器(Decorators)是 Python 的一个重要部分.简单地说:他们是修改其他函数的功能的函数. 比如说我们写flask,路由就是用装饰器定义的.如果写权限控制,那么权限控制一般也是 ...

  9. Flask之基于route装饰器的路由系统(源码阅读解析)

    一 路由系统 1. 在flask中配置URL和视图函数的路由时,首先需要在main.py中实例化一个app对象: from flask import Flask, render_template ap ...

随机推荐

  1. static静态方法的优缺点

    static可以修饰成员变量,成员方法,代码块,类特点: static修饰的方法和变量,为类所属方法和变量,不会在对象销毁时销毁,所以生命周期较长.被static修饰的内容会随着类的加载而加载,优先于 ...

  2. Java学习之Math类理解

    Math类包含用于几何和三角运算的所有浮点函数,以及一些用于通用目的的方法.Math类定义了两个double常量:E(约等于2.72)和PI(约等于3.14) 1.三角函数 表中的方法接收double ...

  3. notepad++编辑器写python需注意使用utf-8编码

    语言:python3.4 文本编辑器:notepad++ 报错:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb4 in ...

  4. 68. 使用thymeleaf报异常:Not Found, status=404【从零开始学Spring Boot】

    [从零开始学习Spirng Boot-常见异常汇总] 我们按照正常的流程编码好了 controller访问访问方法/hello,对应的是/templates/hello.html文件,但是在页面中还是 ...

  5. CSU 1307 最短路+二分

    题目大意: 帮忙找到一条a到b的最短路,前提是要保证路上经过的站点的最大距离尽可能短 这道题居然要用到二分...完全没去想过,现在想想求最大距离的最小值确实是... 这里不断二分出值代入spfa()或 ...

  6. [luoguP1169] [ZJOI2007]棋盘制作(单调栈)

    传送门 和玉蟾宫差不多 ——代码 #include <cstdio> #include <iostream> using namespace std; ; int n, m, ...

  7. android GET 请求在5.0版本的取不到数据,报IO异常兼容问题解决

    使用lib类库xUtils-2.6.10.jar作为数据请求的框架,在android的5.0版会有兼容问题,取不到GET请求的数据. 但是POST没有问题,难取到数据. public static R ...

  8. 次最短路径 POJ 3255 Roadblocks

    http://poj.org/problem?id=3255 这道题还是有点难度 要对最短路径的算法非常的了解 明晰 那么做适当的修改 就可以 关键之处 次短的路径: 设u 到 v的边权重为cost ...

  9. 学习日常笔记<day15>mysql基础

    1.数据库入门 1.1数据库软件 数据库:俗称数据的仓库,方便管理数据的软件(或程序) 1.2市面上数据库软件 Oracle,甲骨文公司的产品. 当前最流行应用最广泛的数据库软件.和java语言兼容非 ...

  10. 收集的一些Redis操作技巧教程

    redis(1).redis入门 redis(2).redis数据类型 redis(3).基于jedis.spring-data-redis 连接操作redis redis(4).基于redis 构建 ...