2018年11月21日 Flask全回顾: 1.Flask启动: from flask import Flask app = Flask(__name__) app.run("0.0.0.0",5000,debug=True) 2.Flask中的路由 + 路由配置 1.@app.route("/index") app.add_url_rule("/index",endpoint="index",view_func=index,**options) def index(): return "123" 2.动态路由参数 @app.route("/index/<nid>",endpoint) def index(nid): url_for(endpoint,nid=1) 配置 @app.route( "/index", methods=["GET","POST"], # 容许进入视图函数的请求方式 endpoint="123", # 反向URL地址 defaults={nid:1}, # 默认参数 strict_slashes=True, # 是否严格要求路由地址 "/" redirect_to="/login" # 重定向跳转 请求进入视图函数以前 301 ) def index(nid) url_for(endpoint) # 反向生成URL 3.Response三剑客 + 小儿子: from flask import render_template,redirect HttpResponse return "小儿子" render return render_template("index.html") redirect return redirect("/login") 小儿子: from flask import send_file,jsonify return send_file() #打开并返回文件内容 return jsonify({"nid":1}) # 返回标准的JSON格式字符串 content-type:application/json 4.Request from flask import request 数据获取: request.form # 获取form表单中的数据 request.json # 请求头:Content-type:application/json request.data # Content-type没法被识别的时候 b"" request.args # URL参数 属性: request.method # 获取请求方式 request.path # 获取路由地址 /index request.url # 获取所有请求地址 http://127.0.0.1:5000/index/aaaa request.host # 获取主机地址:127.0.0.1:5000 5.Jinja2 {{}} 引用 执行 非逻辑 {%%} 逻辑 if for from flask import Markup Markup("<a>连接</a>") | safe 6.session app.secret_key = "asdf123" app.permanent_session_lifetime # 声明周期 31天 session["key"] = "value" 在flask中session放在客户端的cookie中 7.Flask实例化配置 template_folder = "temp" # 更改模板存放目录 static_folder = "" # 静态文件存放目录 默认 static static_url_path = "/" # 静态文件访问路径 默认 /static_folder 8.Flask配置 app.config.from_object(SettingClass) # SettingClass 中配置必须为大写 9.蓝图 Blueprint 一个不能被run的Flask实例 from flask import Blueprint bp = Blueprint("bp",__name__,url_perfix="/bp") template_folder #当前目录 相对路径 static_folder #当前目录 相对路径 url_perfix="/bp" # 蓝图前缀 @bp.route("/bpindex") def bpindex(): app.register_blueprint(bp) 10.特殊装饰器 @app.template_global() # 全局函数 模板调用 @app.template_filter() # 带筛选的全局函数 偏函数 1 | template_filter() @app.before_request # 请求进入视图函数以前调用 @app.after_request # 响应返回客户端以前调用 正常状况下:be1 - be2 - af2 - af1 异常状况下: be1 - af2 - af1 @app.errorhandler(404) # 重定义报错页面 def error404(res) 11.Flash from flask import falsh,get_falshed_messages def func1(): falsh("123456") # [] - "123456" - ["123456"] def func2(): get_falshed_messages() # ["123456"] - [] @app.before_first_request # 基于flash实现的 12.Flask CBV from flask import views class IndexView(views.MethodView): def get(self): pass app.add_url_rule("/index",view_func=IndexView.as_view(name="index")) 今日内容: 1.Flask中的CBV from flask import views class IndexView(views.MethodView): def get(self): pass app.add_url_rule("/index",view_func=IndexView.as_view(name="index")) 2.Flask-Session from flask_session import Session app.config["SESSION_TYPE"] = "redis" app.config["SESSION_REDIS"] = Redis() Session(app) session["key"] = "value" 3.WTForms 由后端生成表单,具备校验功能 from wtforms.fields import simple,core from wtforms import Form,validators class LoginForm(Form): username=simple.StringField( label = "username", validators=[ validators.DataReqired(messges="不能为空"), validators.Length(min=4,max=8,messges="4 < x < 8"), ], render_kw = {"class":"kkkk"} ) lf = LoginForm() render_template("login.html",lf = lf) <form method="post"> {% for f in lf %} <p>{{ f.label }} : {{ f }}{{ f.errors.0 }}</p> {% endfor %} <p><input type="submit" value="注册"></p> </form> lf = LoginForm(request.form) if lf.validata(): OK else: render_template("login.html",lf = lf) 4.DBUtils: 详见: https://www.cnblogs.com/DragonFire/p/9498396.html