小编Jar*_*edL的帖子

烧瓶中的嵌套蓝图?

我仍然是Flask的新手,因此可能有一种明显的方法可以实现这一目标,但到目前为止我还没有能够从文档中找到它.我的应用程序分为几个主要是不同的部分,分享用户/会话/安全性和基本模板等所有内容,但大多数情况下不会进行很多交互,应该在不同的路径下进行路由/part1/....我认为这正是蓝图的用武之地.但是如果我需要在蓝图下进一步分组路由和逻辑呢?

例如,我有blueprint1,url_prefix='/blueprint1'也许在那之下我希望有一组视图围绕用户共享照片和其他用户评论它们.我想不出比这更好的做法:

# app/blueprints/blueprint1/__init__.py

blueprint1 = Blueprint('blueprint1', __name__, template_folder='blueprint1')

@blueprint1.route('/photos')
def photos_index():
    return render_template('photos/index.html')

@blueprint.route('/photos/<int:photo_id>')
def photos_show(photo_id):
    photo = get_a_photo_object(photo_id)
    return render_template('photos/show.html', photo=photo)

@blueprint.route('/photos', methods=['POST'])
def photos_post():
    ...
Run Code Online (Sandbox Code Playgroud)

这里的问题是所有与照片部分相关的视图blueprint1都位于"顶层",右侧可能有视频或音频或其他任何(命名为videos_index()......)的蓝图.有没有办法以更分层的方式对它们进行分组,比如模板如何在'blueprint1/photos'子目录下?当然,我可以将所有照片视图放在他们自己的模块中,以使它们分开组织,但是如果我想将父'blueprint1/photos'路径更改为其他内容呢?我确信我可以创建一个在相同根路径下对相关路由进行分组的函数或装饰器,但是我仍然必须使用photos_前缀命名所有函数并引用它们url_for('blueprint1.photos_show') 当Flask应用程序变大并且您需要将相似的部分组合在一起时,蓝图就好了,但是当蓝图本身变大时,您无法做同样的事情.

作为参考,在Laravel中,您可以Controller在视图是方法的类下对相关的"视图"进行分组.控制器可以驻留在分层名称空间中,例如app\Http\Controllers\Blueprint1\Photocontroller,路由可以组合在一起

Route::group(['prefix' => 'blueprint1'], function() {

    Route::group(['prefix' => 'photos'], function() {

        Route::get('/', ['as' => 'blueprint.photos.index', 'uses' => 'ModelApiController@index']);
        Route::post('/', ['as' => 'blueprint.photos.store', 'uses' => 'ModelApiController@store']);
        Route::get('/{id}', ['as' => 'blueprint.photos.get', …
Run Code Online (Sandbox Code Playgroud)

python design-patterns flask

13
推荐指数
3
解决办法
8159
查看次数

如何在JTextPane中将每个字符设置为不同的颜色/背景颜色?

我一直在寻找这个,到目前为止,我能够想出的是如何创建一个样式并将其应用于这样的角色:

StyledDocument doc = (StyledDocument) new DefaultStyledDocument();
JTextPane textpane = new JTextPane(doc);
textpane.setText("Test");
javax.swing.text.Style style = textpane.addStyle("Red", null);
StyleConstants.setForeground(style, Color.RED);
doc.setCharacterAttributes(0, 1, textpane.getStyle("Red"), true); 
Run Code Online (Sandbox Code Playgroud)

如果您的文档中只有少量样式并希望按名称存储它们,以便以后可以轻松应用它们,这将非常有用.在我的应用程序中,我希望能够为文本中的每个字符独立设置前景色(仅少数值之一)和背景色(灰度,许多不同的值).为此创建潜在的数百/数千种不同风格似乎是一种巨大的浪费.有没有办法设置这些属性,而不必每次都创建一个新的样式?如果我只需渲染文本会更容易,但我也需要使其可编辑.有没有办法做到这一点JTextPane,还是有另一个提供此功能的swing类?

java swing jtextpane jtextcomponent styleddocument

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

有条件地使用上下文管理器的 Pythonic 方式

我认为这是经常出现的问题,但我一直无法找到一个好的解决方案。假设我有一个函数,可以将开放资源作为参数传递(如文件或数据库连接对象),或者需要自己创建一个函数。如果函数需要自己打开文件,最佳实践通常被认为是这样的:

with open(myfile) as fh:
    # do stuff with open file handle...
Run Code Online (Sandbox Code Playgroud)

确保with退出块时文件始终关闭。但是,如果在函数中传递现有文件句柄,则该函数可能不应该关闭它本身。

考虑以下函数,它接受一个打开的文件对象一个给出文件路径的字符串作为其参数。如果传递的是文件路径,则可能应该按上面的方式编写。否则该with语句应被省略。这会导致重复的代码:

def foo(f):
    if isinstance(f, basestring):
        # Path to file, need to open
        with open(f) as fh:
            # do stuff with fh...
    else:
        # Assume open file
        fh = f
        # do the same stuff...
Run Code Online (Sandbox Code Playgroud)

当然,可以通过定义一个辅助函数并在两个地方调用它来避免这种情况,但这看起来不太优雅。我想到的一个更好的方法是定义一个上下文管理器类来包装一个对象,如下所示:

class ContextWrapper(object):
    def __init__(self, wrapped):
        self.wrapped = wrapped
    def __enter__(self):
        return self.wrapped
    def __exit__(self, *args):
        pass

def foo(f):
    if isinstance(f, basestring):
        cm = open(f)
    else: …
Run Code Online (Sandbox Code Playgroud)

python contextmanager python-2.7

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

在Python中使用XML命名空间时,如何使我的代码更具可读性和DRYer?

Python的内置xml.etree包支持使用命名空间解析XML文件,但是命名空间前缀扩展到括在括号中的完整URI.所以在官方文档中的示例文件中:

<actors xmlns:fictional="http://characters.example.com"
    xmlns="http://people.example.com">
    <actor>
        <name>John Cleese</name>
        <fictional:character>Lancelot</fictional:character>
        <fictional:character>Archie Leach</fictional:character>
    </actor>
    ...
Run Code Online (Sandbox Code Playgroud)

actor标签被扩大到{http://people.example.com}actorfictional:character{http://characters.example.com}character.

我可以看到这是如何使一切非常明确并减少歧义(文件可以具有相同的命名空间,具有不同的前缀等)但是使用起来非常麻烦.该Element.find()方法和其他方法允许将dict映射前缀传递给名称空间URI,所以我仍然可以做element.find('fictional:character', nsmap)但据我所知,标记属性没有任何类似之处.这导致了令人讨厌的东西element.attrib['{{{}}}attrname'.format(nsmap['prefix'])].

流行的lxml包提供了相同的API和一些扩展,其中一个扩展是nsmap它们从文档继承的元素的属性.然而,没有一种方法似乎实际上使用它,所以我仍然必须做element.find('fictional:character', element.nsmap),这只是不必要的重复输入每次.它仍然不适用于属性.

幸运的是lxml支持子类化BaseElement,所以我只使用p(for prefix)属性创建一个具有相同API的属性,但使用元素自动使用名称空间前缀nsmap(编辑:可能最好nsmap在代码中分配自定义).所以我只是这样做,element.p.find('fictional:character')或者element.p.attrib['prefix:attrname']更少重复,我认为更具可读性.

我只是觉得我真的错过了一些东西,它真的感觉这应该真的已经是一个功能,lxml如果不是内置etree包.我在某种程度上做错了吗?

python xml lxml elementtree xml-namespaces

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

使用RODBC插入MS-Access数据库中的备注字段时,"无法分配内存"

我正在尝试使用sqlSaveRODBC中的函数向包含备注字段的Microsoft Access数据库中的表插入新行,并且我收到以下错误:

calloc'无法分配内存(107字节为1字节)odbcUpdate通道查询mydata coldata [m,] test verbose nastring

通过设置verbose = TRUE,我在错误之前得到的最后一行是:

Binding: 'notes' DataType -1, ColSize 1073741823
Run Code Online (Sandbox Code Playgroud)

看起来它正在获得备注字段的最大大小,看起来是1GB,然后尝试分配那么多内存.如果我在Access中将字段类型更改为"text",则插入工作正常而不会更改我的代码.有没有办法避免这种行为,或者在字段中存储超过255个字符的文本的替代方法?

sql ms-access r rodbc

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

"参数太少"试图连接到R中的Microsoft Access数据库

我正在使用RODBC连接到微软访问数据库.有些查询工作正常,但在一个查询中我一直收到错误:

07002 -3010 [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
[RODBC] ERROR: Could not SQLExecDirect 'SELECT baseunit FROM archiverapp_common_units WHERE unitname = "ng/ml"'
Run Code Online (Sandbox Code Playgroud)

我正在使用'sqlQuery'函数来进行查询.错误中给出的SELECT语句是我打算使用的,当我直接复制粘贴到Access时可以正常工作.从我收集到的类似帖子中看到的这种情况经常是拼写错误的列或表名,但这里的一切似乎都是正确的.

mysql ms-access odbc r rodbc

4
推荐指数
1
解决办法
3243
查看次数

矢量化代码来计算(平方)Mahalanobis Distiance

编辑2:这篇文章似乎已经从CrossValidated转移到StackOverflow,因为它主要是关于编程,但这意味着花哨的MathJax不再起作用了.希望这仍然可读.

假设我想计算两个向量之间的平方Mahalanobis距离xy协方差矩阵S.这是一个相当简单的函数定义

M2(x, y; S) = (x - y)^T * S^-1 * (x - y)
Run Code Online (Sandbox Code Playgroud)

使用python的numpy包我可以这样做

# x, y = numpy.ndarray of shape (n,)
# s_inv = numpy.ndarray of shape (n, n)
diff = x - y
d2 = diff.T.dot(s_inv).dot(diff)
Run Code Online (Sandbox Code Playgroud)

或者在R中

diff <- x - y
d2 <- t(diff) %*% s_inv %*% diff
Run Code Online (Sandbox Code Playgroud)

但就我而言,我得到了

  • mn矩阵X
  • n- 三维矢量 mu
  • n通过n协方差矩阵S

并希望找到m维向量d …

python numpy r normal-distribution matrix

3
推荐指数
1
解决办法
370
查看次数

在一般情况下,Python的super()实际上是如何工作的?

有很多很棒的资源super(),包括这篇很棒的博客文章,以及关于Stack Overflow的很多问题.但是我觉得他们都没有解释它在最常见的情况下是如何工作的(使用任意继承图),以及在幕后发生的事情.

考虑这个钻石继承的基本例子:

class A(object):
    def foo(self):
        print 'A foo'

class B(A):
    def foo(self):
        print 'B foo before'
        super(B, self).foo()
        print 'B foo after'

class C(A):
    def foo(self):
        print 'C foo before'
        super(C, self).foo()
        print 'C foo after'

class D(B, C):
    def foo(self):
        print 'D foo before'
        super(D, self).foo()
        print 'D foo after'
Run Code Online (Sandbox Code Playgroud)

如果从像源Python的规则,方法解析顺序读了这个或查找的维基百科页面的C3线性化,你会看到,MRO必须(D, B, C, A, object).这当然得到以下证实D.__mro__:

(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>) …
Run Code Online (Sandbox Code Playgroud)

python oop multiple-inheritance super method-resolution-order

3
推荐指数
1
解决办法
397
查看次数

闪亮的自定义输出不渲染

我正在尝试将网络可视化从D3.js绑定到Shiny中的自定义输出.出于某种原因,似乎我的渲染函数没有被调用.这是我的代码:

rbindings.js

var forceNetworkOB = new Shiny.OutputBinding();

forceNetworkOB.find = function(scope) {
  return $(scope).find("svg.rio-force-network");
};

forceNetworkOB.renderValue = function(el, graph) {

  alert('rendering')

  //actual rendering code here...

};

Shiny.outputBindings.register(forceNetworkOB, "jumpy.forceNetworkOB");
Run Code Online (Sandbox Code Playgroud)

CustomIO.R

renderForceNetwork <- function(expr, env=parent.frame(), quoted=FALSE) {

  func <- exprToFunction(expr, env, quoted)

  function() {

    # Never called
    browser()

    graph <- func()

    list(nodes = graph$nodes,
         links = graph$edges
    )
  }
}

forceNetwork <- function(id, width = '400px', height = '400px') {

  tag('svg', list(id = id, class = 'rio-force-network', width = width, height = height)) …
Run Code Online (Sandbox Code Playgroud)

r d3.js shiny

2
推荐指数
1
解决办法
1635
查看次数