Flask Mongoengine是一个提供Mongoengine和WTF模型形式集成的烧瓶扩展。
flask-mongoengine的Python项目详细描述
Flask Mongoengine
===br/>
提供与"Mongoengine"集成的烧瓶扩展<;http://mongoengine.org/>;` `.
有关Mongoengine的详细信息,请查看"Mongoengine文档"<;http://docs.mongoengine.org/>;` ` ` `.
应用程序的操作管理。
您还可以使用"wtforms<;http://wtforms.simplecodes.com/>;``作为模型表单。
安装Flask MongoEngine
======
使用**pip安装**::
pip安装Flask MongoEngine
configuration操作
==br/>
基本设置很简单,只需从烧瓶导入烧瓶中获取扩展名:
你正在初始化应用程序之前设置数据库,就像应用程序工厂一样:
from flask import flask
from flask mongoengine import mongoengine
db=mongoengine()
…
app=flask(\u u name\uu)
app.config.from-config.cfg')
db.init_app(app)
attr:`host`和:attr:`port`设置
在'mongodb-settings'`dictionary wih`app.config`.:
app.config['mongodb-settings']={
'db':'project1',
'host':'192.168.1.35',
'port':12345
}
n,应该提供:attr:`username`和:attr:`password`
参数"mongodb_settings"`dictionary wih`app.config`.:
app.config['mongodb_settings']={
'db':'project1',
'username':'webapp',
'password':'pwd123'
}
uri sty也支持le连接,只需在带有app.config的"mongodb\u设置"字典中提供uri作为:attr:`host`
。**请注意,来自uri的数据库名称优先于名称。**:
app.config['mongodb-settings']={
'db':'project1',
'host':'mongodb://localhost/database-name'
}
h`'mongodb'`在'app.config`.:
app.config['mongodb']='project1'
app.config['mongodb'u host']='192.168.1.35'
app.config['mongodb'u port']=12345
app.config['mongodb'u username']='webapp'
app.config['mongodb'u password']='pwd123'
ault flask mongoengine在扩展被实例化时打开连接,但您可以将其配置为仅在第一次访问数据库时打开连接,方法是将"mongodb"settings['connect']``参数
或其"mongodb"connect``平面设置为"false`":
app.config['mongodb_settings']={
'host':'mongodb://localhost/database_name',
'connect':false,
}
\or
app.config['mongodb_connect']=false
custom queryset
==
flask mongoengine将以下方法附加到mongoengine的default queryset:
**get懔或懔404**:工作方式类似于.get(),但如果对象不存在索引,则调用abort(404)。
**first懔或懔404**:与以上相同,除了.first()。
**paginate**:对queryset进行分页。接受两个参数,*page*和*per_page*
**paginate_field**:从QuerySet中的一个文档对字段进行分页。
参数:*field_name*,*doc_id*,*page*,*per_page*
示例:
404如果对象不存在
def view_todo(todo_id):
todo=todo.objects.get_或_404(_id=todo_id)
…
paginate through todo
def view\u todo(page=1):
paginated\u todo=todo.objects.paginate(page=page,per/u page=10)
paginated_tags=todo.paginate_field('tags',page,per_page=10)
分页对象的属性包括:iter_pages,next,prev,has_next,
has_prev,next_num,prev_num.
在模板中::
{{显示todo页
<;ul gt;
{%在分页的{todo.items%}
<;li>;{{todo.title}<;li>;
{%endfor%}
<;ul>;
{{{macro用于创建导航链接
{%macro呈现导航(分页,端点)%}
<;div class=pagination>;
%fo分页中的r页。iter_pages()%}
{%if page%}
{%if page!=pagination.page%}
<;a href="{{url}(endpoint,page=page)}">;{{page}<;/a>;
{%else%}
<;strong>;{{page}}<;strong>;
{%endif%}
{%else%}
<;span class=ellipsis>;…<://span>;
{%endif%}
{%endfor%}
<;/div>;
{%endmacro%}
{{呈现导航(分页显示,视图显示)}
e型号:
from flask_mongoengine.wtf import model嫒u form
class user(db.document):
email=db.stringfield(必选=true)
first嫒name=db.stringfield(max嫒length=50)
last嫒name=db.stringfield(max嫒length=50)
class content(db.embededdocument:
text=db.stringfield()
lang=db.stringfield(最大长度=3)
class post(db.document):
title=db.stringfield(最大长度=120,必需=true,验证器=[validators.inputrequired(message=u'missing title.'),])
author=db.referencefield(用户)
标记=db.listfield(db.stringfield(最大长度=30))
内容=db.embeddeddocumentfield(内容)
post form=model_form(post)
def add_post(请求):
form=postform(请求.post)
如果请求,方法==postform.validate():
执行一些操作
重定向('done')
返回render_template('add_post.html',form=form)
对于每个mongoengine字段,都使用最合适的wtform字段。
如果转换不是imp,则参数允许用户提供提示合法性:
post form=model_form(post,field_args={'title':{'textarea':true})
支持的参数:
passwordfield
-`textarea`使用textareafield
(默认情况下,stringfield在没有最大长度的情况下转换为textareafield。)
----
*binaryfield
*urlfield
*emailfield
*int字段
*floatfield
*decimalfield
*booleanfield
*datetimefield
**listfield**(使用wtforms.fields.fieldlist)
*sortedlistfield(重复listfield)
**embeddeddocumentfield**(使用wtforms.fields.formfields并生成内联表单)
**referencefield**(美国ing wtforms.fields.selectfieldbase,其中包含从queryset或document加载的选项)
*dictfield
当前不支持的字段类型:
--------------------------
*objectfield
*geolocationfield
*genericreferencefield
==========
使用MongoEngine作为您的会话存储区简单配置会话接口::
r/>调试工具栏面板图片::u static/debug toolbar.png
:target:"调试工具栏"面板
询问
从Flask调试工具栏导入调试工具栏扩展
app=Flask(u name_u)
app.config['debug_tb_panels']=['Flask_mongoengine.panels.mongodebugpanel']
db=mongoengine(app)
toolbar=debugtoolbarextension(app)
========
0.6到0.7
——
`listfieldpagination`参数的顺序已更改为更符合逻辑:
queryset,doc_id,field_name,page,per_page,total)
credits
=
灵感来源于两份回购协议:
`danjac<;https://bitbucket.org/danjac/flask mongoengine>;`<
`maratfm<;https://bitbucket.org/maratfm/wtforms>;`<
===br/>
提供与"Mongoengine"集成的烧瓶扩展<;http://mongoengine.org/>;` `.
有关Mongoengine的详细信息,请查看"Mongoengine文档"<;http://docs.mongoengine.org/>;` ` ` `.
应用程序的操作管理。
您还可以使用"wtforms<;http://wtforms.simplecodes.com/>;``作为模型表单。
安装Flask MongoEngine
======
使用**pip安装**::
pip安装Flask MongoEngine
configuration操作
==br/>
基本设置很简单,只需从烧瓶导入烧瓶中获取扩展名:
你正在初始化应用程序之前设置数据库,就像应用程序工厂一样:
from flask import flask
from flask mongoengine import mongoengine
db=mongoengine()
…
app=flask(\u u name\uu)
app.config.from-config.cfg')
db.init_app(app)
attr:`host`和:attr:`port`设置
在'mongodb-settings'`dictionary wih`app.config`.:
app.config['mongodb-settings']={
'db':'project1',
'host':'192.168.1.35',
'port':12345
}
n,应该提供:attr:`username`和:attr:`password`
参数"mongodb_settings"`dictionary wih`app.config`.:
app.config['mongodb_settings']={
'db':'project1',
'username':'webapp',
'password':'pwd123'
}
uri sty也支持le连接,只需在带有app.config的"mongodb\u设置"字典中提供uri作为:attr:`host`
。**请注意,来自uri的数据库名称优先于名称。**:
app.config['mongodb-settings']={
'db':'project1',
'host':'mongodb://localhost/database-name'
}
h`'mongodb'`在'app.config`.:
app.config['mongodb']='project1'
app.config['mongodb'u host']='192.168.1.35'
app.config['mongodb'u port']=12345
app.config['mongodb'u username']='webapp'
app.config['mongodb'u password']='pwd123'
ault flask mongoengine在扩展被实例化时打开连接,但您可以将其配置为仅在第一次访问数据库时打开连接,方法是将"mongodb"settings['connect']``参数
或其"mongodb"connect``平面设置为"false`":
app.config['mongodb_settings']={
'host':'mongodb://localhost/database_name',
'connect':false,
}
\or
app.config['mongodb_connect']=false
custom queryset
==
flask mongoengine将以下方法附加到mongoengine的default queryset:
**get懔或懔404**:工作方式类似于.get(),但如果对象不存在索引,则调用abort(404)。
**first懔或懔404**:与以上相同,除了.first()。
**paginate**:对queryset进行分页。接受两个参数,*page*和*per_page*
**paginate_field**:从QuerySet中的一个文档对字段进行分页。
参数:*field_name*,*doc_id*,*page*,*per_page*
示例:
404如果对象不存在
def view_todo(todo_id):
todo=todo.objects.get_或_404(_id=todo_id)
…
paginate through todo
def view\u todo(page=1):
paginated\u todo=todo.objects.paginate(page=page,per/u page=10)
paginated_tags=todo.paginate_field('tags',page,per_page=10)
分页对象的属性包括:iter_pages,next,prev,has_next,
has_prev,next_num,prev_num.
在模板中::
{{显示todo页
<;ul gt;
{%在分页的{todo.items%}
<;li>;{{todo.title}<;li>;
{%endfor%}
<;ul>;
{{{macro用于创建导航链接
{%macro呈现导航(分页,端点)%}
<;div class=pagination>;
%fo分页中的r页。iter_pages()%}
{%if page%}
{%if page!=pagination.page%}
<;a href="{{url}(endpoint,page=page)}">;{{page}<;/a>;
{%else%}
<;strong>;{{page}}<;strong>;
{%endif%}
{%else%}
<;span class=ellipsis>;…<://span>;
{%endif%}
{%endfor%}
<;/div>;
{%endmacro%}
{{呈现导航(分页显示,视图显示)}
e型号:
from flask_mongoengine.wtf import model嫒u form
class user(db.document):
email=db.stringfield(必选=true)
first嫒name=db.stringfield(max嫒length=50)
last嫒name=db.stringfield(max嫒length=50)
class content(db.embededdocument:
text=db.stringfield()
lang=db.stringfield(最大长度=3)
class post(db.document):
title=db.stringfield(最大长度=120,必需=true,验证器=[validators.inputrequired(message=u'missing title.'),])
author=db.referencefield(用户)
标记=db.listfield(db.stringfield(最大长度=30))
内容=db.embeddeddocumentfield(内容)
post form=model_form(post)
def add_post(请求):
form=postform(请求.post)
如果请求,方法==postform.validate():
执行一些操作
重定向('done')
返回render_template('add_post.html',form=form)
对于每个mongoengine字段,都使用最合适的wtform字段。
如果转换不是imp,则参数允许用户提供提示合法性:
post form=model_form(post,field_args={'title':{'textarea':true})
支持的参数:
passwordfield
-`textarea`使用textareafield
(默认情况下,stringfield在没有最大长度的情况下转换为textareafield。)
----
*urlfield
*emailfield
*int字段
*floatfield
*decimalfield
*booleanfield
*datetimefield
**listfield**(使用wtforms.fields.fieldlist)
*sortedlistfield(重复listfield)
**embeddeddocumentfield**(使用wtforms.fields.formfields并生成内联表单)
**referencefield**(美国ing wtforms.fields.selectfieldbase,其中包含从queryset或document加载的选项)
*dictfield
当前不支持的字段类型:
--------------------------
*objectfield
*geolocationfield
*genericreferencefield
==========
使用MongoEngine作为您的会话存储区简单配置会话接口::
r/>调试工具栏面板图片::u static/debug toolbar.png
:target:"调试工具栏"面板
询问
从Flask调试工具栏导入调试工具栏扩展
app=Flask(u name_u)
app.config['debug_tb_panels']=['Flask_mongoengine.panels.mongodebugpanel']
db=mongoengine(app)
toolbar=debugtoolbarextension(app)
========
0.6到0.7
——
`listfieldpagination`参数的顺序已更改为更符合逻辑:
queryset,doc_id,field_name,page,per_page,total)
credits
=
灵感来源于两份回购协议:
`danjac<;https://bitbucket.org/danjac/flask mongoengine>;`<
`maratfm<;https://bitbucket.org/maratfm/wtforms>;`<