赞
踩
本文档的目的是帮助您快速入门和运行。因此,事不宜迟,让我们开始吧。
注意
希望您对flask框架和peewee orm有所了解,但是如果没有,那么这些链接应该可以帮助您入门。
注意
有关完整的示例项目,请查看 flask-peewee附带的示例应用程序。
首先,请确保已安装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()
现在应该可以:
仪表板现在很空。继续并添加一些注释(http://127.0.0.1:5000/admin/note/)。如果您现在导航到注释modeladmin,您将看到以下内容:
转存失败重新上传取消正在上传…重新上传取消转存失败重新上传取消这太糟糕了,所以让我们整理一下以显示消息和消息的发布时间。我们可以通过自定义显示的列来做到这一点。通过以下更改编辑应用程序:
- from flask_peewee.admin import Admin, ModelAdmin
-
- class NoteAdmin(ModelAdmin):
- columns = ('message', 'created',)
-
- admin = Admin(app, auth)
-
- admin.register(Note, NoteAdmin)
-
- admin.setup()
现在我们的模型管理员应该看起来像这样:
正在上传…重新上传取消让我们继续将auth.User
模型也添加到管理员中:
- admin.register(Note, NoteAdmin)
- auth.register_admin(admin)
-
- admin.setup()
添加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
对象的序列化副本。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。