1.一旦啓動,全部資源所有加載,用戶到的,浪費了。html
三方以及原生組件,幾乎爲0前端
from flask import Flask #導入flask app = Flask(__name__)#實例化flask對象
app.run("0.0.0.0",5000,debug=True) #運行flask
from flask import Flask #導入flask app = Flask(__name__) #實例化flask對象 @app.route("/") def index(): return "Hello world !" app.run("0.0.0.0",5000,debug=True)
from flask import Flask #導入flask app = Flask(__name__) #實例化flask對象 @app.route("/") def index(): return "Heloo word !" app.run("0.0.0.0",9527,debug=True)
from werkzeug.wrappers import Request,Response from werkzeug.serving import run_simple @Request.application def app(request): print(request) print(request.method) print(request.url) print(dir(request)) return Response("OK!") run_simple("0.0.0.0",8081,app) #當請求進入服務的時候app + () 運行
1 # 在flask中的HTTPResponse,在咱們看來其實就是直接返回字符串 2 3 @app.route("/") #app中的route裝飾器 4 def index(): #視圖函數 5 return "Hello world !"
from flask import Flask,redirect #導入flask中的redirect @app.route("/redi") #app中的route裝飾器,用來指定視圖函數的URL地址 def redi(): #視圖函數 return redirect("/") #redirect跳轉至"/" ##當訪問"/redi"這個地址的時候,視圖函數redi會觸發redirect("/") 跳轉到url地址: "/" 並會觸發"/"對應的視圖函數index()
from flask import render_template #導入flask中的render_template @app.route("/home") #app中的route裝飾器,用來指定試圖函數的url地址 def home(): #home視圖函數 return render_template("home.html") #渲染HTML模版返回HTML頁面
HTML模板渲染是每一個Web框架中都必須有的,至於render_template的具體用法,留個懸念,日後看 python
注意: 若是要使用 render_template 返回渲染的模板,請在項目的主目錄中加入一個目錄 templatesweb
是時候開始寫個前端了,Flask中默認的模板語言是Jinja2
如今咱們來一步一步的學習一下 Jinja2 捎帶手把 render_template 中留下的疑問解決一下
首先咱們要在後端定義幾個字符串,用於傳遞到前端django
STUDENT = {'name': 'Old', 'age': 38, 'gender': '中'}, STUDENT_LIST = [ {'name': 'Old', 'age': 38, 'gender': '中'}, {'name': 'Boy', 'age': 73, 'gender': '男'}, {'name': 'EDU', 'age': 84, 'gender': '女'} ] STUDENT_DICT = { 1: {'name': 'Old', 'age': 38, 'gender': '中'}, 2: {'name': 'Boy', 'age': 73, 'gender': '男'}, 3: {'name': 'EDU', 'age': 84, 'gender': '女'}, }
可是前提咱們要知道Jinja2模板中的流程控制:
I. Jinja2模板語言中的 forflask
{% for foo in g %} {% endfor %}
II. Jinja2模板語言中的 if後端
{% if g %} {% elif g %} {% else %} {% endif %}
接下來,咱們對這幾種狀況分別進行傳遞,並在前端顯示成表格 websocket
@app.route("/student") def index(): return render_template("student.html",student=STUDENT)
前端:session
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Old Boy EDU</title> </head> <body> Welcome to Old Boy EDU <div>{{ student }}</div> <table border="1px"> <tr> <td>{{ student.name }}</td> <td>{{ student["age"] }}</td> <td>{{ student.get("gender") }}</td> </tr> </table> </body> </html>
說明:從這個例子中,能夠看出來,字典傳入前端Jinja2 模板語言中的取值操做, 與Python中的Dict操做極爲類似,而且多了一個student.name的對象操做 app
後端:
@app.route("/student_list") def student_list(): return render_template("student_list.html",student=STUDENT_LIST)
前端:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Old Boy EDU</title> </head> <body> Welcome to Old Boy EDU <div>{{ student }}</div> <table border="1xp"> {% for foo in student %} <tr> <td>{{ foo }}</td> <td>{{ foo.name }}</td> <td>{{ foo.get("age") }}</td> <td>{{ foo["gender"] }}</td> </tr> {% endfor %} </table> </body> </html>
這裏咱們能夠看出若是是須要循環遍歷的話,Jinja2 給咱們的方案是
{% for foo in student %} <tr> <td>{{ foo }}</td> </tr> {% endfor %}
上述代碼中的foo就是列表中的每個字典,再使用各類取值方式取出值便可。
後端:
@app.route("/student_dict") def student_dict(): return render_template("student_dict.html", student=STUDENT_DICT)
前端:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Old Boy EDU</title> </head> <body> Welcome to Old Boy EDU <table> {% for foo in student %} <tr> <td>{{ foo }}</td> <td>{{ student.get(foo).name }}</td> <td>{{ student[foo].get("age") }}</td> <td>{{ student[foo]["gender"] }}</td> </tr> {% endfor %} </table> </body> </html>
在遍歷字典的時候,foo 實際上是至關於拿出了字典中的Key
後端:
@app.route("/allstudent") def all_student(): return render_template("all_student.html", student=STUDENT , student_list = STUDENT_LIST, student_dict= STUDENT_DICT)
前端:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Old Boy EDU</title> </head> <body> <div> _____________________________________</div> Welcome to Old Boy EDU : student <div>{{ student }}</div> <table border="1px"> <tr> <td>{{ student.name }}</td> <td>{{ student["age"] }}</td> <td>{{ student.get("gender") }}</td> </tr> </table> <div> _____________________________________</div> Welcome to Old Boy EDU : student_list <div>{{ student_list }}</div> <table border="1xp"> {% for foo in student_list %} <tr> <td>{{ foo }}</td> <td>{{ foo.name }}</td> <td>{{ foo.get("age") }}</td> <td>{{ foo["gender"] }}</td> </tr> {% endfor %} </table> <div> _____________________________________</div> Welcome to Old Boy EDU : student_dict <div>{{ student_dict }}</div> <table border="1xp"> {% for foo in student_dict %} <tr> <td>{{ foo }}</td> <td>{{ student_dict.get(foo).name }}</td> <td>{{ student_dict[foo].get("age") }}</td> <td>{{ student_dict[foo]["gender"] }}</td> </tr> {% endfor %} </table> </body> </html>
這裏能夠看出來,render_template中能夠傳遞多個關鍵字