教程译文首发自我的博客,Defshine's Blog
如果你还没有阅读本教程的第一部分,可以访问这里:
我翻译的:如何使用Flask开发一个增删改查的应用
英文原文:How to build a CRUD application using Flask
在之前的教程里,我们定义了一个Note的数据模型:
class Note(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80))
body = db.Column(db.Text)
def __init__(self, title, body):
self.title = title
self.body = body
Jaapz告诉我,当创建Note数据模型时,没有必要使用一个自定义的__init__方法:
https://www.reddit.com/r/flask/comments/4bgisp/how_to_build_a_crud_application_using_flask/d18ygml
所以让我们移除这个自定义的__init__方法,那你的Note数据模型应该是这样的:
class Note(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80))
body = db.Column(db.Text)
现在我们将要创建一个笔记的页面。
在main.py:
下面这段代码的上面:
if __name__ == "__main__":
app.run(debug=True)
增加以下代码:
@app.route(“/notes/create”, methods=[“GET”, “POST”])
这个路由将会处理HTTP请求的GET和POST方法。
如果你对HTTP方法不太熟悉,你可以参考这里:http://www.tutorialspoint.com/http/http_methods.htm
接下来,在路由的下面增加一下代码。
在main.py:
def create_note():
if request.method == "GET":
return render_template("create_note.html")
else:
title = request.form["title"]
body = request.form["body"]
note = Note(title=title, body=body)
db.session.add(note)
db.session.commit()
return redirect(“/notes/create”)
如果请求的方法是GET方法,上面这个函数就会渲染create_note.html模板。如果请求方法不是GET方法(在我们这个例子里,如果请求的方法不是GET方法,我们就认为这个请求是POST方法。我们断定请求方法如果不是GET方法就是POST方法,因为我们的路由只允许处理GET和POST方法)
检查我们在上面增加的路由:
methods=["GET", "POST"]
回到我刚才说的,如果请求方法不是GET方法,我们就通过request.form[]获取提交的title和body,并且把它们的值保存在title和body两个变量里。
下面,我们将初始化一个Note模型,并且把title和body这个两个变量放进去。把Note实例赋给note变量。
获取成为Python开发专家的技巧。访问: http://treehouse.7eer.net/c/245500/245646/3944
下面,我们把note变量传给 db.session.add()。
然后,我们调用db.session.commit()把笔记保存到数据库中。 随之,我们重定向到相同的页面上。
如果你想理解SQLAlchemy的回话(session)是如何工作的,你可以阅读这篇文章:http://pythoncentral.io/understanding-python-sqlalchemy-session/
在template文件夹中,创建一个文件名为create_note.html,然后复制以下内容:
<form action=”/notes/create” method=”POST”>
<label>Title</label>
<input type=”text” name=”title”>
<label>Body</label>
<input type=”text” name=”body”>
<input type=”submit” value=”Create”>
</form>
在这里我们只是增加了一个HTML表单,它包含两个标签,两个文本框以及一个提交按钮。我们可以在两个文本框输入笔记的标题和内容。同时,我们设置表单的方法属性为POST。如果我们不这里定义一个方法,它就会默认使用GET方法。
如果你对HTML表单不太熟悉,你可以参考这里:http://www.w3schools.com/html/html_forms.asp
现在,你在浏览器里访问http://localhost:5000/notes/create,你应该会看到下图这样:
如果你看到了像“页面未找到”或者“网站无法访问”这样的错误,可能是因为你的服务器没有运行。所以,要检查确保服务器是运行的。如果它没有运行,在note_app目录下,通过以下命令运行服务器:
python main.py
当你在创建笔记的页面上,输入标题和内容,通过点击提交按钮就可以创建一则笔记。你应该会被重定向到相同的页面上,但是输入的内容应该会消失。
现在我们来检查一下笔记是否被保存进了数据库。
在本教程中,我们将使用一个名为SQLite manager: https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/的工具。
它是一个火狐浏览器的扩展,我们可以使用它管理SQLite数据库。安装,打开火狐浏览器,点击tools,然后点SQLite manager:
找到SQLite manager的文件夹图标并点击它。通过note_app文件夹下的app.sqlite文件打开应用的SQLite数据库。
现在点击Tables,点击note,点击Browse & Search,你应该会看到我们之前创建的笔记的数据。
接下来呢?
在下次的教程中,我们将创建列表页面,它会展示所有我们添加到数据库中的笔记数据。或许,也会增加一个编辑笔记的特性。
教程的源代码放在Github上:https://github.com/basco-johnkevin/note-taking-app/tree/master/part2
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。