2

flask

教程译文首发自我的博客,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[]获取提交的titlebody,并且把它们的值保存在titlebody两个变量里。
下面,我们将初始化一个Note模型,并且把titlebody这个两个变量放进去。把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,你应该会看到下图这样:
img

如果你看到了像“页面未找到”或者“网站无法访问”这样的错误,可能是因为你的服务器没有运行。所以,要检查确保服务器是运行的。如果它没有运行,在note_app目录下,通过以下命令运行服务器:

python main.py

当你在创建笔记的页面上,输入标题和内容,通过点击提交按钮就可以创建一则笔记。你应该会被重定向到相同的页面上,但是输入的内容应该会消失。

现在我们来检查一下笔记是否被保存进了数据库。
在本教程中,我们将使用一个名为SQLite manager: https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/的工具。
它是一个火狐浏览器的扩展,我们可以使用它管理SQLite数据库。安装,打开火狐浏览器,点击tools,然后点SQLite manager:
img

找到SQLite manager的文件夹图标并点击它。通过note_app文件夹下的app.sqlite文件打开应用的SQLite数据库。
现在点击Tables,点击note,点击Browse & Search,你应该会看到我们之前创建的笔记的数据。
图片描述

接下来呢?

在下次的教程中,我们将创建列表页面,它会展示所有我们添加到数据库中的笔记数据。或许,也会增加一个编辑笔记的特性。

教程的源代码放在Github上:https://github.com/basco-johnkevin/note-taking-app/tree/master/part2

原文地址:https://medium.com/python-flask-django-tutorials-and-tips/how-to-build-a-crud-application-using-flask-python-framework-part-2-6859b4730350#.n0j5pwauj


defshine
517 声望37 粉丝

Java攻城狮,Python爱好者,喜欢Flask,热爱开源。