小编aro*_*nbo的帖子

预填充 Flask-WTForm IntegerField

简单的形式:

class AdjustPWMForm(Form):
    dutyCycle = IntegerField('dutycycle')
    #dutyCycle = IntegerField('dutycycle', default=44)
Run Code Online (Sandbox Code Playgroud)

查看功能:

 def adjust():
    user = g.user
    form = AdjustPWMForm()
    form.dutyCycle.data = 55
    if form.validate_on_submit():
        dutyCycle = form.dutyCycle.data
        print('result %s', dutyCycle)
        return redirect(url_for('statusPage'))

    return render_template('adjust.html', title='Adjust PWM', user=user, form=form)
Run Code Online (Sandbox Code Playgroud)

提交表单时,无论输入什么,结果始终为 55。如果我注释掉 55 行,并使用 default=44 取消注释该行,则表单可以正常工作,但我确实需要能够设置预填充值(它将从数据库中检索)。

似乎我错过了一些非常明显的东西,但我四处寻找却无法弄清楚。

我发现在change_username有用的部分wtforms这使我:

def adjust():
    user = g.user
    form = AdjustPWMForm(dutyCycle=55)
    if form.validate_on_submit():
        dutyCycle = form.dutyCycle.data
        return redirect(url_for('statusPage'))

    return render_template('adjust.html', title='Adjust PWM', user=user, form=form)
Run Code Online (Sandbox Code Playgroud)

这是实现这一目标的最佳方式吗?

python flask wtforms flask-wtforms

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

重用 aiosqlite 连接

我只是不知道如何使用 aiosqlite 模块,以便我可以保持连接以备后用。

基于aiosqlite 项目页面的示例

async with aiosqlite.connect('file.db') as conn:
    cursor = await conn.execute("SELECT 42;")
    rows = await cursor.fetchall()
    print('rows %s' % rows)
Run Code Online (Sandbox Code Playgroud)

工作正常,但我想保持连接,以便我可以在整个程序中使用它。

通常,使用 sqlite,我会打开一个连接,将其存储起来,然后在程序的整个生命周期中使用它。

我也尝试过这样的事情:

conn = aiosqlite.connect('file.db')
c = await conn.__enter__()
AttributeError: 'Connection' object has no attribute '__enter__'
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有上下文管理器的情况下使用这个模块?

python sqlite contextmanager

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

意外的split()行为Python

Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 'Checksum\t\x85\r\n'.split()
['Checksum']
Run Code Online (Sandbox Code Playgroud)

标签后面的部分在哪里?

但是,这些工作如预期的那样:

>>> 'Checksum\t\x84\r\n'.split()
['Checksum', '\x84']
>>> 'Checksum\t\x85\r\n'.split('\t')
['Checksum', '\x85\r\n']
>>> 'Checksum\t\x84\r\n'.split('\t')
['Checksum', '\x84\r\n']
Run Code Online (Sandbox Code Playgroud)

Python 3.6.6上的结果相同.

有趣的是,它在Python 2.7.10上运行良好

Python 2.7.10 (default, Aug 17 2018, 17:41:52)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 'Checksum\t\x85\r\n'.split()
['Checksum', '\x85']
>>> 'Checksum\t\x84\r\n'.split()
 ['Checksum', '\x84'] 
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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