flask的路由配置,特殊装饰器
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的路由配置,特殊装饰器的更多相关文章
- flask 第三章 特殊装饰器 CBV Flask-Session WTForms
1.flask中的特殊装饰器 前面我们讲过的装饰器函数中,用来登录验证,这次我们来介绍几个flask中的特殊装饰器 1). @app.before_request 具体的用途是: 在请求进入视图函数之 ...
- Flask蓝图Blueprint和特殊装饰器
Flask 中的 蓝图 Blueprint 不能被run的flask实例:相当于django中的app01 应用 蓝图作用:功能隔离 路由隔离 Blueprint就是 一个不能run的flask 蓝图 ...
- Django drf:视图层封装、ViewSetMixin、路由配置、解析器、响应器
一.视图层封装 二.ViewSetMixin 三.路由配置 四.解析器 五.响应器 一.视图层封装 1.基本视图 写一个出版社的增删改查resfull接口 路由: url(r'^publish/$', ...
- Flask中那些特殊的装饰器
模板相关的装饰器 @app.template_global() 用法: @app.template_global() # 记得加括号 def jiafa(a, b): # 这个方法每调用一次就需要传一 ...
- flask+blueprint路由配置
1.flask默认的静态文件和html文件在app应用文件夹里的相应文件夹下:app // Flask||--static ||--templates |静态文件默认的url地址为:url_prefi ...
- tornado 第二种路由方法(装饰器)
#!/usr/bin/env python # _*_coding:utf-8 _*_ import tornado.ioloop import tornado.web application = t ...
- Flask需要登录权限的装饰器写法
def wapper(func): def inner(*args,**kwargs): if not request.cookies.get("username"): retur ...
- python装饰器 语法糖
简介: 装饰器(Decorators)是 Python 的一个重要部分.简单地说:他们是修改其他函数的功能的函数. 比如说我们写flask,路由就是用装饰器定义的.如果写权限控制,那么权限控制一般也是 ...
- Flask之基于route装饰器的路由系统(源码阅读解析)
一 路由系统 1. 在flask中配置URL和视图函数的路由时,首先需要在main.py中实例化一个app对象: from flask import Flask, render_template ap ...
随机推荐
- 深入Linux内核架构——简介与概述
一.内核的任务 纯技术层面上,内核是硬件与软件的之间的一个中间层.作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址. 从应用程序视角上看,内核可以被认为是一台增强 ...
- git/github初级使用
1.常见的github 国内最流行的php开发框架(thinkphp):https://github.com/top-think/thinkphp 全球最流行的php框架(laravel):https ...
- ssh 监听多个端口
修改sshd的配置文件 默认位置:/etc/ssh/sshd_config 注释掉 Port 这行 然后添加 ListenAddress 行 e.g: ListenAddress 192.168 ...
- BZOJ 1022: [SHOI2008]小约翰的游戏John【anti-SG】
Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取 ...
- BZOJ4552 - [TJOI2016]排序
Portal Description 给出一个\(1..n(n\leq10^5)\)的排列,进行\(m(m\leq10^5)\)次操作: 升序排列\([L,R]\)中的数. 降序排列\([L,R]\) ...
- java打开本地应用程序(调用cmd)---Runtime用法详解
有时候我们需要借助java程序打开电脑自带的一些程序,可以直接打开或者借助cmd命令窗口打开一些常用的应用程序或者脚本,在cmd窗口执行的命令都可以通过这种方式运行. 例如: package cn.x ...
- FusionCharts for Flex 如何更改图表数据
FusionCharts allows to change chart data and re-render the chart, after it has loaded on the user’s ...
- POJ 2502 【思维是朴素的最短路 卡输入和建图】
题意: 给出两个坐标,分别是小明家和小明学校的坐标. 给出多条地铁线,给出每站的坐标,已知地铁是双向的,每条线以-1 -1结尾. 给出地铁速度,步行速度. 地铁线可看成是顺次连接的线段. 求小明从家到 ...
- Java后端技术书单
写博客记录技术上使用的各种问题,这个只能算是一个打游击. 如果要把一个知识学透,最有效的方式就是系统学习,而系统学习就是看书,书本上有清晰的学习路线以及相应的技术栈. 下面是我收集的Java后端的技术 ...
- java中可以通过调用ping命令来判断网络是否连接正常
原文:http://www.open-open.com/code/view/1446382328960 import java.io.BufferedReader; import java.io.IO ...