flask peewee教程

入门

本文档的目的是帮助您快速入门和运行。因此,事不宜迟,让我们开始吧。

注意

希望您对flask框架peewee orm有所了解,但是如果没有,那么这些链接应该可以帮助您入门。

注意

有关完整的示例项目,请查看 flask-peewee附带的示例应用程序

创建一个Flask应用程序

首先,请确保已安装flask-peewee及其依赖项。您可以通过运行测试套件进行验证:。python setup.py test

确保已安装所有东西后,打开一个名为“ app.py”的新文件,然后输入以下代码:

from flask import Flask

app = Flask(__name__)
app.config.from_object(__name__)

if __name__ == '__main__':
    app.run()

这不是很令人兴奋,但是我们可以通过运行应用程序来签出我们的项目:

$ python app.py
 * Running on http://127.0.0.1:5000/
 * Restarting with reloader

导航到列出的URL将显示一个简单的404页面,因为我们尚未配置任何模板或视图。

创建一个简单的模型

让我们添加一个简单的模型。但是,在执行此操作之前,有必要初始化peewee数据库包装程序并配置数据库:

from flask import Flask

# flask-peewee bindings
from flask_peewee.db import Database

# configure our database
DATABASE = {
    'name': 'example.db',
    'engine': 'peewee.SqliteDatabase',
}
DEBUG = True
SECRET_KEY = 'ssshhhh'

app = Flask(__name__)
app.config.from_object(__name__)

# instantiate the db wrapper
db = Database(app)

if __name__ == '__main__':
    app.run()

这样做是为我们提供了请求处理程序,该处理程序在每个请求上都连接到数据库,并在请求完成后将其关闭。它还提供了一个基本模型类,该类被配置为与配置中指定的数据库一起使用。

现在我们可以创建一个模型:

import datetime
from peewee import *


class Note(db.Model):
    message = TextField()
    created = DateTimeField(default=datetime.datetime.now)

注意

我们创建的模型Note,子类db.Model,又是其子类,该子类peewee.Model已预先配置为与我们的数据库对话。

设置一个简单的基本模板

我们需要一个简单的模板作为我们应用程序的基础模板,因此请创建一个名为的文件夹templates。在templates文件夹中创建一个文件base.html 并添加以下内容:

<!doctype html>
<html>
<title>Test site</title>
<body>
  <h2>{% block content_title %}{% endblock %}</h2>
  {% block content %}{% endblock %}
</body>
</html>

将用户添加到网站

在我们可以Note在管理员中编辑这些模型之前,我们需要某种方式来对网站上的用户进行身份验证。这是Auth进入的地方。 Auth提供了User用于登录和注销的模型和视图,并且是所需的Admin

from flask_peewee.auth import Auth

# create an Auth object for use with our flask app and database wrapper
auth = Auth(app, db)

让我们还修改运行应用程序的代码,以确保在需要时创建表:

if __name__ == '__main__':
    auth.User.create_table(fail_silently=True)
    Note.create_table(fail_silently=True)

    app.run()

清理导入和声明后,我们将得到以下内容:

import datetime
from flask import Flask
from flask_peewee.auth import Auth
from flask_peewee.db import Database
from peewee import *

# configure our database
DATABASE = {
    'name': 'example.db',
    'engine': 'peewee.SqliteDatabase',
}
DEBUG = True
SECRET_KEY = 'ssshhhh'

app = Flask(__name__)
app.config.from_object(__name__)

# instantiate the db wrapper
db = Database(app)


class Note(db.Model):
    message = TextField()
    created = DateTimeField(default=datetime.datetime.now)


# create an Auth object for use with our flask app and database wrapper
auth = Auth(app, db)


if __name__ == '__main__':
    auth.User.create_table(fail_silently=True)
    Note.create_table(fail_silently=True)

    app.run()

使用管理区域管理内容

现在我们准备添加管理员。在Auth类的初始化之后放置以下代码行:

from flask_peewee.admin import Admin

admin = Admin(app, auth)
admin.register(Note)

admin.setup()

现在,我们有一个正常运行的管理站点!当然,我们需要用户登录,因此在应用程序旁边的目录中打开一个交互式python shell并运行以下命令:

from app import auth
auth.User.create_table(fail_silently=True)  # make sure table created.
admin = auth.User(username='admin', email='', admin=True, active=True)
admin.set_password('admin')
admin.save()

现在应该可以:

  1. 导航到http://127.0.0.1:5000/admin/
  2. 输入用户名和密码(“ admin”,“ admin”)
  3. 重定向到管理仪表板
fp-getting-started.jpguploading.4e448015.gif转存失败重新上传取消fp-getting-started.jpguploading.4e448015.gif正在上传…重新上传取消fp-getting-started.jpguploading.4e448015.gif转存失败重新上传取消_images / fp-getting-started.jpg

仪表板现在很空。继续并添加一些注释(http://127.0.0.1:5000/admin/note/)。如果您现在导航到注释modeladmin,您将看到以下内容:

fp-note-admin.jpguploading.4e448015.gif转存失败重新上传取消fp-note-admin.jpguploading.4e448015.gif正在上传…重新上传取消fp-note-admin.jpguploading.4e448015.gif转存失败重新上传取消_images / fp-note-admin.jpg

这太糟糕了,所以让我们整理一下以显示消息和消息的发布时间。我们可以通过自定义显示的列来做到这一点。通过以下更改编辑应用程序:

from flask_peewee.admin import Admin, ModelAdmin

class NoteAdmin(ModelAdmin):
    columns = ('message', 'created',)

admin = Admin(app, auth)

admin.register(Note, NoteAdmin)

admin.setup()

现在我们的模型管理员应该看起来像这样:

fp-note-admin-2.jpguploading.4e448015.gif正在上传…重新上传取消_images / fp-note-admin-2.jpg

让我们继续将auth.User模型也添加到管理员中:

admin.register(Note, NoteAdmin)
auth.register_admin(admin)

admin.setup()

使用REST API公开内容

添加REST API与添加Admin接口非常相似。我们将创建一个RestAPI对象,然后向其注册我们的项目模型。如果要自定义内容,可以将其子类化RestResource

然后,第一步是创建RestAPI对象:

from flask_peewee.rest import RestAPI

# create a RestAPI container
api = RestAPI(app)

api.setup()

这还没有做任何事情,我们需要先向其注册模型。让我们Note从前面注册模型:

# create a RestAPI container
api = RestAPI(app)

# register the Note model
api.register(Note)

api.setup()

假设您的项目仍在运行,请尝试执行以下命令(或仅浏览至列出的网址):

$ curl http://127.0.0.1:5000/api/note/

您应该看到类似以下的内容:

{
  "meta": {
    "model": "note",
    "next": "",
    "page": 1,
    "previous": ""
  },
  "objects": [
    {
      "message": "blah blah blah this is a note",
      "id": 1,
      "created": "2011-09-23 09:07:39"
    },
    {
      "message": "this is another note!",
      "id": 2,
      "created": "2011-09-23 09:07:54"
    }
  ]
}

假设我们希望注册用户也能够使用该API发布消息。如果您现在尝试进行POST,则会收到以下 401答复:

$ curl -i -d '' http://127.0.0.1:5000/api/note/

HTTP/1.0 401 UNAUTHORIZED
WWW-Authenticate: Basic realm="Login Required"
Content-Type: text/html; charset=utf-8
Content-Length: 21
Server: Werkzeug/0.8-dev Python/2.6.6
Date: Fri, 23 Sep 2011 14:45:38 GMT

Authentication failed

这是因为我们尚未Authentication为设置任何方法RestAPI

注意

API的默认身份验证机制仅接受GET请求。为了处理POST / PUT / DELETE,您将需要使用Authentication该类的子 类。

为了允许站点的用户发布注释,我们将使用UserAuthentication 子类,该子类要求使用HTTP Basic auth进行API请求,并且auth凭据与其中一种auth.User模型的凭据匹配。

from flask_peewee.rest import RestAPI, UserAuthentication

# instantiate the user auth
user_auth = UserAuthentication(auth)

# create a RestAPI container
api = RestAPI(app, default_auth=user_auth)

现在,我们可以使用curl这样的命令行工具发布新笔记:

$ curl -u admin:admin -d data='{"message": "hello api"}' http://127.0.0.1:5000/api/note/

{
  "message": "hello api",
  "id": 3,
  "created": "2011-09-23 13:14:56"
}

您可以看到它返回了新Note对象的序列化副本。

注意

这只是您可以使用Rest API的一个小示例– 有关更多详细信息,请参阅Rest API文档,包括

  • 限制每个模型的访问
  • 自定义API返回的字段
  • 使用GET参数进行过滤和查询
发布了9 篇原创文章 · 获赞 0 · 访问量 1336

猜你喜欢

转载自blog.csdn.net/rui7157/article/details/104789577