中間一個禮拜沒有看過flask了,今天從新撿起來,一切又開始陌生了。強迫本身看下去,也算是有了收穫。html
之前大概到這裏就開始沒有怎麼實際寫過代碼了,其實看書,和實際寫代碼還真是差的很遠。flask
剛看了沒多久,因爲本身如今是本身手敲,因此走了一些彎路,但這些彎路其實對於成長來講,還真是頗有用的。bootstrap
這裏我舉個剛剛遇到的例子。app
不知道爲何博客園好像上傳圖片的服務出問題了函數
命令行還不能複製,蛋疼的很,我仍是口述吧。測試
from flask import Flask, render_template from flask import request # from flask_script import Manager from flask_bootstrap import Bootstrap from flask_moment import Moment from datetime import datetime from flask_wtf import Form from wtforms import StringField, SubmitField from wtforms.validators import Required class NameForm(Form): name = StringField("你是什麼名字?", validators=[Required()]) submit = SubmitField("提交") app = Flask(__name__) app.config["SECRET_KEY"] = "my_flasky" bootstap = Bootstrap(app) moment = Moment(app) form = NameForm() # manager = Manager(app) @app.route("/") def index(): return render_template("index.html", current_time = datetime.now()) @app.route("/user/<name>") def user(name): return render_template("user.html", name = name) @app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 @app.errorhandler(500) def page_not_found(e): return render_template('500.html'), 404 @app.route("/test", methods=['GET', 'POST']) def test(form): return render_template("test.html", form = form) if __name__ == "__main__": app.run(debug=True)
上述代碼運行,會出現一個莫名報錯。報錯內容是和上下文有關係的。說實話,到如今這個階段,我是不太理解上下文的。ui
可是後面一想,結合到狗書中的代碼我想到了一個問題,我實例化form出問題了。spa
我不能在全局裏面實例化他,而應該是視圖函數裏面實例化他。這樣我才能拿到上下文。命令行
因此後面改爲這樣了。debug
from flask import Flask, render_template from flask import request # from flask_script import Manager from flask_bootstrap import Bootstrap from flask_moment import Moment from datetime import datetime from flask_wtf import Form from wtforms import StringField, SubmitField from wtforms.validators import Required class NameForm(Form): name = StringField("你是什麼名字?", validators=[Required()]) submit = SubmitField("提交") app = Flask(__name__) app.config["SECRET_KEY"] = "my_flasky" bootstap = Bootstrap(app) moment = Moment(app) # manager = Manager(app) @app.route("/") def index(): return render_template("index.html", current_time = datetime.now()) @app.route("/user/<name>") def user(name): return render_template("user.html", name = name) @app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 @app.errorhandler(500) def page_not_found(e): return render_template('500.html'), 404 @app.route("/test", methods=['GET', 'POST']) def test(): form = NameForm() return render_template("test.html", form = form) if __name__ == "__main__": app.run(debug=True)
代碼正常,雖然說沒什麼技術含量,可是這可能對上下文的理解有幫助,我就發上來了。
另外,再補充一句,我和狗書上不一樣的是,我是用了單獨一個test函數來測試的,我以爲這樣的方法還不錯,先在test裏面驗證是否OK,再去改實際的函數。
修飾的路由函數,其實能夠去掉關鍵字參數methods也能正常運行,只不過可能提交表單會出問題,還沒測試,待你們來驗證吧!