回顧
#6行flaskfrom flask import Flaskapp = Flask(__name__)@app.route("/")def index(): return "HelloWorld!!"app.run()
1.response
from flask import render_template,redirect,send_file,jsonifyreturn =httpresponserender_templateredirect特殊返回值1.send_file(文件路徑) 打開文件并返回文件內(nèi)容 Content-Type 文件類型 自動識別2.jsonify({k:v}) Content-Type:application/json app.config["JSONIFY_MIMETYPE"]
2.request
request.method 請求方式request.args url參數(shù)print(request.args.to_dict())#轉(zhuǎn)換成字典request.form FormData 數(shù)據(jù)request.json #請求頭 Content-Type:application/json 數(shù)據(jù)序列化至此request.data 只要請求體中有內(nèi)容 b"”request.files 接收FormData中的文件
3.session
from flask import sessionapp.secret_key="123213"session["user"]="username"
4.路由
動態(tài)參數(shù)@app.route("/detail/<stu_id>")def detail(stu_id) 1.endpoint Flask Mapping 路由和視圖的指向 2.methods 允許進(jìn)入視圖函數(shù)的請求方式
5.初始化配置
Flask(__name__) 中1.template_folder 模版存放路徑2.static_folder 靜態(tài)文件存放路徑3.static_url_path 金泰文件訪問路徑
6.config對象 正式測試環(huán)境
2.Flask對象配置 app.config == app.default_config 查看默認(rèn)配置 及 配置項(xiàng) class Obj(object): DEBUG = True app.config.from_object(Obj) # 記住
7.藍(lán)圖
Flask藍(lán)圖 Blueprint: bp.py from flask import Blueprint # 把Blueprint理解為 不能被 Run 的 Flask 對象 bp = Blueprint("bp",__name__,url_prefix="/user") @bp.route("/bp",methods=["GET","Post"]) def my_bp(): return "I am bp in user.py" __init__py from flask import Flask from .views import add def create_app(): app=Flask(__name__) app.register_blueprint(add.add) return app app.py: from flask import Flask from user import bp from acc import acc app = Flask(__name__) app.register_blueprint(bp) app.register_blueprint(acc) if __name__ == '__main__': app.run(debug=True)
8.特殊裝飾器 中間件
@app.before_request # 在請求進(jìn)入視圖函數(shù)之前@app.after_request # 結(jié)束視圖函數(shù)之后,在響應(yīng)返回客戶端之前def af5(ret):正常 be1 - be2 - vf - af5 - af4 - af3 - af2 - af1異常 be1 - af5 - af4 - af3 - af2 - af1@app.errorhandler(404)def error404(error_message):
9.CBV
from flask import viewsclass Login(views.MethodView): def get(self): pass def post(self): passapp.add_url_rule("/login",endpoint=None,view_func=Login.as_view(name="login"))endpoint == as_view(name="login") 中的 "login"
jianjin2 模版
{{}} 引用 執(zhí)行函數(shù) {%%} 邏輯代碼 {{ stu_list[0].name }}{{ stu_list.0.age }} {{ stu_dict }}{% for stu in stu_list %} <p>{{ stu.name }}{{ stu.get("age") }}{{ stu["gender"] }}</p>{% endfor %}#if判斷{% if v["gender"] == "中" %} 男{% else %} {{ v["gender"] }}{% endif %}自定義標(biāo)簽simple_tag@app.template_global()#全局使用 可選def ab(a,b): return a b html中引入 {{ ab(4,4) }} 前端執(zhí)行html@app.route("/")def index(): tag = "<input type='text' name='user' value='xiao'>" return render_template("index.html",tag=tag)<body> {{ tag|safe }}</body>后端執(zhí)行htmlfrom flask import Markup # 導(dǎo)入 flask 中的 Markup 模塊@app.route("/")def index(): tag = "<input type='text' name='user' value='xiao'>" # Markup幫助咱們在HTML的標(biāo)簽上做了一層封裝,讓Jinja2模板語言知道這是一個安全的HTML標(biāo)簽 markup_tag = Markup(tag) print(markup_tag,type(markup_tag)) return render_template("index.html", tag=markup_tag) 母板index.html<body> <h1>Welcome to My</h1> <h2>下面的內(nèi)容是不一樣的</h2> {% block content %} {% endblock %} <h2>上面的內(nèi)容是不一樣的,但是下面的內(nèi)容是一樣的</h2> <h1>My is Good</h1></body>login.html{% extends "index.html"%}{% block content %}{% endblock %}include jinja2login.html<h4>歡迎登陸</h4><form> 用戶名:<input type="text" name="user"> 密碼:<input type="text" name="pwd"> <input type="submit" value="提交"></form>index.html 文件中的內(nèi)容<body> <h1>Welcome to My</h1> {% include "login.html" %} <h2>上面的內(nèi)容是不一樣的,但是下面的內(nèi)容是一樣的</h2> <h1>My is Good</h1></body>
?
來源:http://www.icode9.com/content-4-162701.html