中间一个礼拜没有看过flask了,今天重新捡起来,一切又开始陌生了。强迫自己看下去,也算是有了收获。
以前大概到这里就开始没有怎么实际写过代码了,其实看书,和实际写代码还真是差的很远。
刚看了没多久,由于自己现在是自己手敲,所以走了一些弯路,但这些弯路其实对于成长来说,还真是很有用的。
这里我举个刚刚遇到的例子。
不知道为什么博客园好像上传图片的服务出问题了
命令行还不能复制,蛋疼的很,我还是口述吧。
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)
上述代码运行,会出现一个莫名报错。报错内容是和上下文有关系的。说实话,到现在这个阶段,我是不太理解上下文的。
但是后面一想,结合到狗书中的代码我想到了一个问题,我实例化form出问题了。
我不能在全局里面实例化他,而应该是视图函数里面实例化他。这样我才能拿到上下文。
所以后面改成这样了。
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也能正常运行,只不过可能提交表单会出问题,还没测试,待大家来验证吧!
时间: 2024-11-10 11:07:28