当前位置:   article > 正文

flask peewee教程

flask peewee

入门

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

注意

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

注意

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

创建一个Flask应用程序

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

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

  1. from flask import Flask
  2. app = Flask(__name__)
  3. app.config.from_object(__name__)
  4. if __name__ == '__main__':
  5. app.run()

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

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

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

创建一个简单的模型

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

  1. from flask import Flask
  2. # flask-peewee bindings
  3. from flask_peewee.db import Database
  4. # configure our database
  5. DATABASE = {
  6. 'name': 'example.db',
  7. 'engine': 'peewee.SqliteDatabase',
  8. }
  9. DEBUG = True
  10. SECRET_KEY = 'ssshhhh'
  11. app = Flask(__name__)
  12. app.config.from_object(__name__)
  13. # instantiate the db wrapper
  14. db = Database(app)
  15. if __name__ == '__main__':
  16. app.run()

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

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

  1. import datetime
  2. from peewee import *
  3. class Note(db.Model):
  4. message = TextField()
  5. created = DateTimeField(default=datetime.datetime.now)

注意

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

设置一个简单的基本模板

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

  1. <!doctype html>
  2. <html>
  3. <title>Test site</title>
  4. <body>
  5. <h2>{% block content_title %}{% endblock %}</h2>
  6. {% block content %}{% endblock %}
  7. </body>
  8. </html>

将用户添加到网站

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

  1. from flask_peewee.auth import Auth
  2. # create an Auth object for use with our flask app and database wrapper
  3. auth = Auth(app, db)

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

  1. if __name__ == '__main__':
  2. auth.User.create_table(fail_silently=True)
  3. Note.create_table(fail_silently=True)
  4. app.run()

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

  1. import datetime
  2. from flask import Flask
  3. from flask_peewee.auth import Auth
  4. from flask_peewee.db import Database
  5. from peewee import *
  6. # configure our database
  7. DATABASE = {
  8. 'name': 'example.db',
  9. 'engine': 'peewee.SqliteDatabase',
  10. }
  11. DEBUG = True
  12. SECRET_KEY = 'ssshhhh'
  13. app = Flask(__name__)
  14. app.config.from_object(__name__)
  15. # instantiate the db wrapper
  16. db = Database(app)
  17. class Note(db.Model):
  18. message = TextField()
  19. created = DateTimeField(default=datetime.datetime.now)
  20. # create an Auth object for use with our flask app and database wrapper
  21. auth = Auth(app, db)
  22. if __name__ == '__main__':
  23. auth.User.create_table(fail_silently=True)
  24. Note.create_table(fail_silently=True)
  25. app.run()

使用管理区域管理内容

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

  1. from flask_peewee.admin import Admin
  2. admin = Admin(app, auth)
  3. admin.register(Note)
  4. admin.setup()

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

  1. from app import auth
  2. auth.User.create_table(fail_silently=True) # make sure table created.
  3. admin = auth.User(username='admin', email='', admin=True, active=True)
  4. admin.set_password('admin')
  5. 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

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

  1. from flask_peewee.admin import Admin, ModelAdmin
  2. class NoteAdmin(ModelAdmin):
  3. columns = ('message', 'created',)
  4. admin = Admin(app, auth)
  5. admin.register(Note, NoteAdmin)
  6. admin.setup()

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

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

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

  1. admin.register(Note, NoteAdmin)
  2. auth.register_admin(admin)
  3. admin.setup()

使用REST API公开内容

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

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

  1. from flask_peewee.rest import RestAPI
  2. # create a RestAPI container
  3. api = RestAPI(app)
  4. api.setup()

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

  1. # create a RestAPI container
  2. api = RestAPI(app)
  3. # register the Note model
  4. api.register(Note)
  5. api.setup()

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

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

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

  1. {
  2. "meta": {
  3. "model": "note",
  4. "next": "",
  5. "page": 1,
  6. "previous": ""
  7. },
  8. "objects": [
  9. {
  10. "message": "blah blah blah this is a note",
  11. "id": 1,
  12. "created": "2011-09-23 09:07:39"
  13. },
  14. {
  15. "message": "this is another note!",
  16. "id": 2,
  17. "created": "2011-09-23 09:07:54"
  18. }
  19. ]
  20. }

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

  1. $ curl -i -d '' http://127.0.0.1:5000/api/note/
  2. HTTP/1.0 401 UNAUTHORIZED
  3. WWW-Authenticate: Basic realm="Login Required"
  4. Content-Type: text/html; charset=utf-8
  5. Content-Length: 21
  6. Server: Werkzeug/0.8-dev Python/2.6.6
  7. Date: Fri, 23 Sep 2011 14:45:38 GMT
  8. Authentication failed

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

注意

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

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

  1. from flask_peewee.rest import RestAPI, UserAuthentication
  2. # instantiate the user auth
  3. user_auth = UserAuthentication(auth)
  4. # create a RestAPI container
  5. api = RestAPI(app, default_auth=user_auth)

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

  1. $ curl -u admin:admin -d data='{"message": "hello api"}' http://127.0.0.1:5000/api/note/
  2. {
  3. "message": "hello api",
  4. "id": 3,
  5. "created": "2011-09-23 13:14:56"
  6. }

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

注意

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

  • 限制每个模型的访问
  • 自定义API返回的字段
  • 使用GET参数进行过滤和查询
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/172910
推荐阅读
相关标签
  

闽ICP备14008679号