flask peewee教程
入门
本文档的目的是帮助您快速入门和运行。因此,事不宜迟,让我们开始吧。
注意
希望您对flask框架和peewee orm有所了解,但是如果没有,那么这些链接应该可以帮助您入门。
注意
有关完整的示例项目,请查看 flask-peewee附带的示例应用程序。
创建一个Flask应用程序
首先,请确保已安装flask-peewee及其依赖项。您可以通过运行测试套件进行验证:。python setup.py test
确保已安装所有东西后,打开一个名为“ app.py”的新文件,然后输入以下代码:
from flask import Flaskapp = 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 Adminadmin = 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/
- 输入用户名和密码(“ admin”,“ admin”)
- 重定向到管理仪表板
仪表板现在很空。继续并添加一些注释(http://127.0.0.1:5000/admin/note/)。如果您现在导航到注释modeladmin,您将看到以下内容:
转存失败重新上传取消正在上传…重新上传取消转存失败重新上传取消这太糟糕了,所以让我们整理一下以显示消息和消息的发布时间。我们可以通过自定义显示的列来做到这一点。通过以下更改编辑应用程序:
from flask_peewee.admin import Admin, ModelAdminclass 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公开内容
添加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 GMTAuthentication 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参数进行过滤和查询
flask peewee教程
入门
本文档的目的是帮助您快速入门和运行。因此,事不宜迟,让我们开始吧。
注意
希望您对flask框架和peewee orm有所了解,但是如果没有,那么这些链接应该可以帮助您入门。
注意
有关完整的示例项目,请查看 flask-peewee附带的示例应用程序。
创建一个Flask应用程序
首先,请确保已安装flask-peewee及其依赖项。您可以通过运行测试套件进行验证:。python setup.py test
确保已安装所有东西后,打开一个名为“ app.py”的新文件,然后输入以下代码:
from flask import Flaskapp = 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 Adminadmin = 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/
- 输入用户名和密码(“ admin”,“ admin”)
- 重定向到管理仪表板
仪表板现在很空。继续并添加一些注释(http://127.0.0.1:5000/admin/note/)。如果您现在导航到注释modeladmin,您将看到以下内容:
转存失败重新上传取消正在上传…重新上传取消转存失败重新上传取消这太糟糕了,所以让我们整理一下以显示消息和消息的发布时间。我们可以通过自定义显示的列来做到这一点。通过以下更改编辑应用程序:
from flask_peewee.admin import Admin, ModelAdminclass 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公开内容
添加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 GMTAuthentication 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参数进行过滤和查询