小编Pac*_*aco的帖子

如何在Flask中为每个请求创建pymongo连接

在我的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)

它确实有效.所以问题是:

  1. 这是在烧瓶中使用Connection的最佳方法吗?

  2. 我是否需要在teardown_request中明确回收资源以及如何执行此操作?

python connection pymongo flask

7
推荐指数
1
解决办法
3811
查看次数

在Flask + Heroku上将HTTP重定向到HTTPS

当我尝试将传入流量重定向到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来降低成本.

python https heroku flask

7
推荐指数
3
解决办法
8794
查看次数

Flask Gunicorn app无法让__name__等于'__main__'

我有这个来自/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)

python nginx flask gunicorn

7
推荐指数
1
解决办法
2564
查看次数

修改Flask-Restless的JSON响应

我正在尝试使用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的要求?我有这种感觉它可能在后处理器函数中,但我不知道如何实现它.

python flask ember.js flask-restless

7
推荐指数
2
解决办法
2581
查看次数

使用flask不安分的多对多关系,发布一对多的数据

我的问题是关于如何使用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)

我希望将其添加到数据库中,这将创建三件事:

一页,两页标签.

我可以不安地做这件事吗?怎么办?

提前欣赏它.

python many-to-many http-post flask flask-restless

7
推荐指数
1
解决办法
1707
查看次数

Flask-Admin自动上传并插入数据库

我的用户在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/上解释),但无法找到有关如何合并添加用户和照片上传的任何信息相同的观点.

任何线索?

python flask flask-sqlalchemy flask-admin

7
推荐指数
1
解决办法
3863
查看次数

m2m字段上的post_save信号

我有一个非常通用的文章模型,与标签模型有m2m关系.我想保留每个标签使用的计数,我认为最好的方法是对标签模型上的计数字段进行非规范化,并在每次保存文章时更新它.我怎样才能做到这一点,或者有更好的方法?

python django django-signals

6
推荐指数
1
解决办法
3804
查看次数

flask-app根目录的jinja变量

我一直在使用非常容易拾取的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团队!

python jinja2 flask

6
推荐指数
1
解决办法
2266
查看次数

Flask-WTForms在我的项目目录中找不到WTForms

这是我在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

python google-app-engine flask wtforms

6
推荐指数
2
解决办法
9080
查看次数

Flask如何使用init_db()以声明方式使用sqlalchemy?

这是我的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 sqlalchemy flask

6
推荐指数
1
解决办法
3210
查看次数