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)