在我的Flask应用程序中,我希望直接使用pymongo.但我不确定为每个请求创建pymongo连接以及如何回收连接资源的最佳方法是什么.
我知道pymongo中的Connection是线程安全的,并且内置了池.我想我需要创建一个全局的Connection实例,并使用before_request将它放入flask g中.
在app.py中:
from pymongo import Connection
from admin.views import admin
connection = Connection()
db = connection['test']
@app.before_request
def before_request():
g.db = db
@app.teardown_request
def teardown_request(exception):
if hasattr(g, 'db'):
# FIX
pass
Run Code Online (Sandbox Code Playgroud)
在admin/views.py中:
from flask import g
@admin.route('/')
def index():
# do something with g.db
Run Code Online (Sandbox Code Playgroud)
它确实有效.所以问题是:
这是在烧瓶中使用Connection的最佳方法吗?
我是否需要在teardown_request中明确回收资源以及如何执行此操作?
当我尝试将传入流量重定向到https时,我得到一个无限重定向循环.
@app.route('/checkout/')
def checkout():
checkout = "https://myapp.herokuapp.com/checkout/"
if checkout != request.url:
print checkout, request.url
return redirect(checkout)
return render_template('checkout.html', key=keys['publishable_key'])
Run Code Online (Sandbox Code Playgroud)
request.url永远不会更改为前缀https.我想使用heroku的搭载ssl来降低成本.
我有这个来自/home/myname/myapp/app.py:
from flask import Flask
app = Flask(__name__)
print __name__
@app.route('/')
def index():
return "Hello world!"
if __name__ == '__main__':
print 'in if'
app.run()
Run Code Online (Sandbox Code Playgroud)
当我跑:
$ gunicorn app:app -b 127.0.0.2:8000
Run Code Online (Sandbox Code Playgroud)
它说:
2013-03-01 11:26:56 [21907] [INFO] Starting gunicorn 0.17.2
2013-03-01 11:26:56 [21907] [INFO] Listening at: http://127.0.0.2:8000 (21907)
2013-03-01 11:26:56 [21907] [INFO] Using worker: sync
2013-03-01 11:26:56 [21912] [INFO] Booting worker with pid: 21912
app
Run Code Online (Sandbox Code Playgroud)
所以该__name__应用程序是app.不__main__喜欢我需要它来运行if语句.
我试着__init__.py在目录中放空.这是我的nginx sites-enabled default:
server …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Flask-Restless和Ember.js,这并不是那么好.这是GET响应让我沮丧.例如,当我发出GET请求时/api/people,例如Ember.js期望:
{
people: [
{ id: 1, name: "Yehuda Katz" }
]
}
Run Code Online (Sandbox Code Playgroud)
但Flask-Restless回应:
{
"total_pages": 1,
"objects": [
{ "id": 1, "name": "Yahuda Katz" }
],
"num_results": 1,
"page": 1
}
Run Code Online (Sandbox Code Playgroud)
如何更改Flask-Restless的响应以符合Ember.js的要求?我有这种感觉它可能在后处理器函数中,但我不知道如何实现它.
我的问题是关于如何使用post添加多个关系数据
我正在使用烧瓶,烧瓶 - SQLAlchemy,烧瓶 - 不安和angularjs,json
我有一些像这样的桌子
class Page(db.Model):
id = db.Column(db.Integer, primary_key=True)
page_name = db.Column(db.String(10))
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
tag_name = db.Column(db.String(10))
class PageTags(db.Model):
page_id = db.Column(db.Integer, db.ForeignKey('page.id'), primary_key=True)
tag_id = db.Column(db.Integer, db.ForeignKey('tag.id'), primary_key=True)
info = db.Column(db.Text)
tag = db.relationship('Tag', backref='tag')
page = db.relationship('Page', backref='pagetags')
Run Code Online (Sandbox Code Playgroud)
我想发布这样的数据
{
"id": 1,
"page_name": "p1",
"pagetags": [
{
"info": "pt1",
"page_id": 1,
"tag_id": 1
},
{
"info": "pt2",
"page_id": 1,
"tag_id": 2
}
]
}
Run Code Online (Sandbox Code Playgroud)
我希望将其添加到数据库中,这将创建三件事:
一页,两页标签.
我可以不安地做这件事吗?怎么办?
提前欣赏它.
我的用户在SQLAlchemy中建模为:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
url_pic = Column(String(50), nullable=False)
(...)
Run Code Online (Sandbox Code Playgroud)
我希望将用户添加到Flask-Admin中的数据库,这样当我创建用户时,我可以直接上传照片,并且目标URL将被解析并传递给数据库中的url_pic字段.
我已经可以添加用户和上传照片了(请在https://flask-admin.readthedocs.org/en/latest/quickstart/上解释),但无法找到有关如何合并添加用户和照片上传的任何信息相同的观点.
任何线索?
我有一个非常通用的文章模型,与标签模型有m2m关系.我想保留每个标签使用的计数,我认为最好的方法是对标签模型上的计数字段进行非规范化,并在每次保存文章时更新它.我怎样才能做到这一点,或者有更好的方法?
我一直在使用非常容易拾取的Flask系统开发一个应用程序,我使用了一个jinja模板来写出一堆链接,这些链接对应于Flask中的页面,这些链接由以下内容定义:
@app.route(/<var1>/<var2>)
...
...
Run Code Online (Sandbox Code Playgroud)
在测试服务器中这些链接工作得很好但是当我从测试服务器移动到代理服务器后面的服务器时,我遇到一个问题,其中href链接没有考虑我的代理插入的额外目录名称.
#where a link should read:
server:/myapp/<var1>/<var2>
# it acually puts out:
server:/<var1>/<var2>
Run Code Online (Sandbox Code Playgroud)
我的jinja etemplate看起来像这样,但我想知道是否有一种方法来放置一个指定根目录的变量而不是反斜杠.
{% block navigation %}
{% for record in db.values() %}
<li><a href="/{{db.name}}/{{record.name}}">{{record.name}}</a></li>
{% endfor %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.谢谢Flask团队!
这是我在StackOverflow上的第一篇文章,大家好.
我正在做博客应用程序来学习Python和Flask,我想在Google App Engine上启动它.不幸的是,我将WTForms导入应用程序时遇到了小问题.我目前正在使用Flask 0.9,WTForms 1.0.1和Flask-WTForms 0.8.我已经将flaskext_wtf文件夹添加到我的项目的根路径,但是我从html5.py文件中收到错误.
File "/Users/lucas/Workspace/blog/flask_wtf/html5.py", line 1, in <module>
from wtforms import TextField
File "/Users/lucas/Workspace/blog/flask/exthook.py", line 86, in load_module
raise ImportError('No module named %s' % fullname)
ImportError: No module named flask.ext.wtf.wtforms
Run Code Online (Sandbox Code Playgroud)
看起来它试图在扩展路径中找到wtforms而不是我的项目路径.如何通知html5.py文件在根目录中查找wtforms?
以下是我项目的来源 - https://bitbucket.org/lucas_mendelowski/wblog/src
这是我的database.py
engine = create_engine('sqlite:///:memory:', echo=True)
session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
Base = declarative_base()
Base.query = session.query_property()
def init_db():
# import all modules here that might define models so that
# they will be registered properly on the metadata. Otherwise
# you will have to import them first before calling init_db()
import models
Base.metadata.create_all(engine)
Run Code Online (Sandbox Code Playgroud)
这是我的backend.py
from flask import Flask, session, g, request, render_template
from database import init_db, session
from models import *
app = Flask(__name__)
app.debug = True
app.config.from_object(__name__)
# Serve …Run Code Online (Sandbox Code Playgroud) python ×10
flask ×9
connection ×1
django ×1
ember.js ×1
flask-admin ×1
gunicorn ×1
heroku ×1
http-post ×1
https ×1
jinja2 ×1
many-to-many ×1
nginx ×1
pymongo ×1
sqlalchemy ×1
wtforms ×1