從新撿起flask(四)

中間一個禮拜沒有看過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也能正常運行,只不過可能提交表單會出問題,還沒測試,待你們來驗證吧!

相關文章
相關標籤/搜索