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>;`<




欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在JScrollPane标题中禁用鼠标滚轮滚动?   java如何为篮球计分器应用程序存储包括球队名称在内的比赛分数?   java如何使用ADT接口实例化列表   JavaCV抓取帧方法延迟并返回旧帧   java在上传文件时处理网络问题   java如何创建2d阵列的克隆?   关于XMLGregorianCalendar的java信息   java XmlUnit在比较XML文件时忽略元素的顺序   java如何最好地检测无意义的文本?   克隆如何制作java扫描仪的副本?   验证Java中空值的BigDecimal数据类型   java字符串数组中的字数   java JavaFX:如何选择平铺并添加数字和边框线?   java更改jtable中从jar文件获取的特定行的颜色   正则表达式Java字符串。拆分:将\\W用作非单词分隔符时出现问题   当内存损坏时,Java中的同一引用/实例变量会发生什么变化?   java无法在Javadoc注释中链接到JDK10