小编Pac*_*aco的帖子

Flask:子目录中的静态文件

在我的烧瓶模板文件中,我包含一个css文件(我省略了样板文件),如下所示:

url_for('static', filename='css/bootstrap.css')

这将呈现为/static/css/bootstrap.css(由于前导斜杠)它被解释为domain.com/static/css/boostrap.css.不幸的是,实际的static文件夹位于一个子目录中:domain.com/projects/test/static/

环境细节:

我的fcgi文件位于~/fcgi-bin文件夹中(主机特定我猜):

$ cat ~/fcgi-bin/test.fcgi
#!/usr/bin/env python2.7

import sys
sys.path.insert(0, "/home/abcc/html/projects/test")

from flup.server.fcgi import WSGIServer
from app import app

class ScriptNameStripper(object):
   def __init__(self, app):
       self.app = app

   def __call__(self, environ, start_response):
       environ['SCRIPT_NAME'] = ''
       return self.app(environ, start_response)

app = ScriptNameStripper(app)

if __name__ == '__main__':
    WSGIServer(app).run()
Run Code Online (Sandbox Code Playgroud)

和我的.htaccess位于domain.com/projects/test/

$ cat .htaccess 
<IfModule mod_fcgid.c>
   AddHandler fcgid-script .fcgi
   <Files ~ (\.fcgi)>
       SetHandler fcgid-script
       Options +FollowSymLinks +ExecCGI
   </Files>
</IfModule>

<IfModule mod_rewrite.c>
   Options …
Run Code Online (Sandbox Code Playgroud)

python fastcgi url-for flask

9
推荐指数
1
解决办法
1万
查看次数

怎么理解这个烧瓶的代码?

谁有人解释这条线?

g = LocalProxy(lambda: _request_ctx_stack.top.g) 
Run Code Online (Sandbox Code Playgroud)

来自烧瓶的代码

from werkzeug import LocalStack, LocalProxy

# context locals
_request_ctx_stack = LocalStack()
current_app = LocalProxy(lambda: _request_ctx_stack.top.app)
request = LocalProxy(lambda: _request_ctx_stack.top.request)
session = LocalProxy(lambda: _request_ctx_stack.top.session)
g = LocalProxy(lambda: _request_ctx_stack.top.g) 
Run Code Online (Sandbox Code Playgroud)

Local的代码在这里:http: //pastebin.com/U3e1bEi0

python werkzeug flask

8
推荐指数
1
解决办法
3888
查看次数

Flask-SQLAlchemy:照片列类型

在我使用Flask/SQLAlchemy进行编码的Web应用程序中,我的几个模型需要一个"Photo"列类型,它可以处理将原始图像存储在文件系统的某个位置,并创建图像的不同缩略图大小.理想情况下,Id需要以下内容:

class MyModel(Base):
    id        = Column(Integer, primary_key=True)
    photo     = Column(Photo(root="/path/to/photos/", formats={
        "big"      : "800x600",
        "small"    : "400x300",
        "thumbnail": "100x75"
    }))
Run Code Online (Sandbox Code Playgroud)

然后,我可以像这样访问文件的URI/URL:model.photo.big等...

所以,我的问题是:如何在model.photo对象上添加setter/getter,以便我可以使用提到的语法访问URIS/URLS?顺便说一句,如果有人在SQLAlchemy的用户定义类型上有一个很好的教程/资源(官方文档除外),我将不胜感激他是否可以分享它.

谢谢.

python sqlalchemy flask flask-sqlalchemy

8
推荐指数
1
解决办法
4416
查看次数

用烧瓶保护静态文件

我正在构建一个烧瓶应用程序,我希望它只在用户通过身份验证时才提供一些静态文件.这是一个非常低流量的应用程序(仅供内部使用).我该怎么做?我想到的一件事是使用serve_static(),并将其放在身份验证检查之后但是使用了已经提供内容的静态目录.

python security static password-protection flask

8
推荐指数
1
解决办法
3080
查看次数

如何在Heroku上存储私钥?

我有一个托管在Heroku上的烧瓶应用程序需要使用boto.cmdshell在AWS EC2实例(Amazon Linux AMI)上运行命令.几个问题:

  1. 使用密钥对访问EC2实例的最佳做法是什么?或者更好地使用用户名/密码?
  2. 如果使用密钥对是首选方法,那么在Heroku上管理/存储私钥的最佳做法是什么?显然,将私钥放在git中是不可取的.

谢谢.

python heroku flask

8
推荐指数
2
解决办法
4603
查看次数

uWSGI并优雅地杀死多线程Flask应用程序

我正在实现一个使用APScheduler(使用线程池)的系统来获取一些资源.

我试图找出一种方法来检测"应用程序重启",以便我可以关闭APScheduler线程池.我正在重新启动,将SIGHUP发送到uWSGI主进程.

有没有人尝过其中之一?如果是这样,检测应用重启事件的正确方法是什么?

  • uwsgidecoratorspostfork装饰,
  • uwsgi模块signal_waitsignal_received功能

signal_wait功能块,所以我的线程运行,但uWSGI不提供请求.我也试过设置scheduler.daemonic为False和True - 它无论如何都没有用.uWSGI进程仍然记录如下:

worker 1 (pid: 20082) is taking too much time to die...NO MERCY !!!

python flask uwsgi

8
推荐指数
1
解决办法
1554
查看次数

烧瓶mongoengine分页

我有一个小的Flask应用程序,它呈现博客文章:

views.py:

class ListView(MethodView):

    def get(self, page=1):
        posts = Post.objects.all()
        return render_template('posts/list.html', posts=posts)
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但我想为posts对象添加分页.看一下项目文档,我看到有一个分页类.

所以我尝试了这个:

class ListView(MethodView):

    def get(self, page=1):
        posts = Post.objects.paginate(page=page, per_page=10)
        return render_template('posts/list.html', posts=posts)
Run Code Online (Sandbox Code Playgroud)

但现在我收到一个错误:

TypeError: 'Pagination' object is not iterable
Run Code Online (Sandbox Code Playgroud)

那么如何posts在模板中迭代我?

任何帮助非常感谢.

python mongodb mongoengine flask

8
推荐指数
1
解决办法
5170
查看次数

jquery插件Datatable:在tbody中使用rowspan会导致错误

我正在使用一个jQuery名为的插件DataTables:

http://www.datatables.net/

该插件不支持tbody中的rowspan

<tr class="colorrow">   
    <td id="greater" rowspan="3">TMMS</td> 
    <td>Case Volume</td> 
    <td>0</td> 
    <td>0</td> 
    <td>0</td> 
    <td>1</td> 
    <td>1</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

还有其他解决方案吗?

jquery html-table datatables

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

如何在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不安分的多对多关系,发布一对多的数据

我的问题是关于如何使用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
查看次数