我正在研究如何使用Python开发一个像样的Web应用程序.由于我不希望某些高阶结构妨碍我,我的选择落在了轻量级的Flask框架上.时间将证明这是否是正确的选择.
所以,现在我已经设置了一个带有mod_wsgi的Apache服务器,我的测试站点运行正常.但是,我想通过在我制作的py或模板文件中的任何更改时自动重新加载网站来加速开发例程.我看到网站的.wsgi文件中的任何更改都会导致重新加载(即使没有在apache配置文件中使用WSGIScriptReloading),但我仍然需要手动生成它(即插入额外的换行符,保存).当我编辑一些应用程序的py文件时,有什么方法可以导致重新加载吗?或者,我应该使用IDE为我刷新.wsgi文件?
在Flask应用程序中实施Google+登录的Google 教程中,我发现开发人员经常使用一种执行JavaScript代码的笨拙方式:
而不是做
var a = foo(bar);
Run Code Online (Sandbox Code Playgroud)
我看到了这个:
var a = (function() {
return foo(bar);
})();
Run Code Online (Sandbox Code Playgroud)
以奇怪的方式做到这一点的原因是什么?
Flask中是否存在应用程序范围的python变量?我想在用户和共享数据缓存之间实现一些原始消息传递.当然,可以通过数据库实现这一点,但我想知道可能存在无db且可能更快的方法.理想情况下,如果共享变量是一个实时python对象,但我的需求也会满足字符串和整数.
编辑:补充(非工作)示例
from flask import g
@app.route('/store/<name>')
def view_hello(name=None):
g.name = name
return "Storing " + g.name
@app.route("/retrieve")
def view_listen():
n = g.name
return "Retrieved: " + n
Run Code Online (Sandbox Code Playgroud)
在尝试检索g.name时,会触发错误:AttributeError:'_ RequestGlobals'对象没有属性'name'
我正在尝试使用Python将基本MIDI消息发送到合成器.
我知道PC-Synthesizer链接功能正常,因为当MIDI输出设置为'DigitalKBD 20:0'端口时,Rosegarden应用程序可以配置为在设备上播放MIDI文件.
我发现了这个Python库(MIDO)并安装了它.好消息是外部MIDI设备在端口列表中被识别并可用.不幸的是,简单的音符开启测试不会触发设备上的任何声音.这是我试过的代码:
使用PortMidi(这是MIDO的默认设置):
>>> import mido
>>> output = mido.open_output('DigitalKBD MIDI 1')
>>> output.send(mido.Message('note_on', note=60, velocity=64))
Run Code Online (Sandbox Code Playgroud)
使用RtMidi:
>>> import mido
>>> rtmidi = mido.Backend('mido.backends.rtmidi')
>>> output = rtmidi.open_output('DigitalKBD 20:0')
>>> output.send(mido.Message('note_on', note=60, velocity=64))
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,合成器都没有声音.
请问,我可以获得如何修复代码(或设置)的建议,以便仪器正确接收和解释消息吗?
我刚在AWS上创建了一个EC2实例.在此之前,我创建了我的密钥对,下载了私钥.
我现在正在尝试登录到新创建的实例(使用正确的主机名,当然,为了安全起见,我在这里替换了).我添加了-v开关来获取调试输出:
ssh ec2-user@myVirtualHost.compute-1.amazonaws.com -i ~/EC2key.pem -v
Run Code Online (Sandbox Code Playgroud)
虽然我提供了密钥文件,但我被要求输入密码.以下是调试输出的摘录,可能显示出现了什么问题:
debug1: Host 'myVirtualHost.compute-1.amazonaws.com' is known and matches the ECDSA host key.
debug1: Found key in /home/myuser/.ssh/known_hosts:15
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/myuser/EC2key.pem
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey,password
debug1: …Run Code Online (Sandbox Code Playgroud) 在我的第一个Flask项目上工作时,我在尝试从Jinja2模板渲染宏时偶然发现了jinja2.exceptions.UndefinedError异常.事实证明,Jinja2在尝试解析确实包含对全局请求对象的引用的模板的其余部分时会生成此异常.
这是我用于测试用例的模板test.html:
<!doctype html>
{% macro test_macro() -%}
Rendered from macro
{%- endmacro %}
{{ request.authorization }}
Run Code Online (Sandbox Code Playgroud)
Flask代码#1:渲染模板(成功):
@app.route("/test")
def test_view():
return render_template('test.html')
Run Code Online (Sandbox Code Playgroud)
Flask代码#2:渲染宏(失败):
@app.route("/test")
def test_view():
test_macro = get_template_attribute('test.html', 'test_macro')
return test_macro()
Run Code Online (Sandbox Code Playgroud)
如果{{ request.authorization }}从模板中取出,第二次测试将成功执行.
Flask代码#3:使用我在Flask邮件列表存档中找到的解决方法(成功):
@app.route("/test")
def test_view():
t = app.jinja_env.get_template('test.html')
mod = t.make_module({'request': request})
return mod.test_macro()
Run Code Online (Sandbox Code Playgroud)
虽然我现在有一个工作代码,但我不知道第二种方法失败的原因让我感到不舒服.为什么当需要只渲染宏时,Jinja2甚至会困扰模板的其余部分呢?
我试图找出如何在Flask中使用全局变量:
gl = {'name': 'Default'}
@app.route('/store/<name>')
def store_var(name=None):
gl['name'] = name
return "Storing " + gl['name']
@app.route("/retrieve")
def retrieve_var():
n = gl['name']
return "Retrieved: " + n
Run Code Online (Sandbox Code Playgroud)
存储名称并从另一个客户端检索它可以正常工作.然而,这感觉不对:一个简单的全局字典,其中任何会话几乎同时可以抛出复杂的对象,这真的有效,没有任何可怕的后果吗?
我负责将旧的Access 2007项目迁移到MS SQL Server 2008 Express.第一阶段是将所有数据从MS Access数据库移动到SQL服务器,同时在客户端保留Access表单和报表.
因此,现在移动数据,创建SQL服务器用户(仅用于访问该特定数据库),并通过ODBC连接将表链接到Access数据库.但是,应该以某种方式解决一个麻烦:Access在打开Access数据库时会定期询问用户密码.
服务器PC和客户端PC上的用户都登录到本地计算机,即他们的用户未在独立域服务器上进行验证.
我看到有几种方法可以解决这个问题:
我正在寻找一种方法将"类别"子项添加到"对象"实体,而不会浪费首先加载子对象的性能.
"对象"和"类别"表与多对多关系链接,存储在"ObjectCategory"表中."对象"模型随关系提供:
categories = relationship('Category', secondary = 'ObjectCategory', backref = 'objects')
Run Code Online (Sandbox Code Playgroud)
现在这段代码工作得很好:
obj = models.Object.query.get(9)
cat1 = models.Category.query.get(22)
cat2 = models.Category.query.get(28)
obj.categories.extend([cat1, cat2])
Run Code Online (Sandbox Code Playgroud)
但是在调试输出中,我看到实例化obj,除了单个批量INSERT命令之外,每个类别都花费了我对数据库服务器的单独SELECT命令.在这种情况下完全不需要,因为我对操纵给定的类别对象不感兴趣.基本上我只需要很好地插入适当的类别ID.
最明显的解决方案是继续直接在关联表中插入条目:
db.session.add(models.ObjectCategory(oct_objID=9, oct_catID=22))
db.session.add(models.ObjectCategory(oct_objID=9, oct_catID=28))
Run Code Online (Sandbox Code Playgroud)
但是这种方法有点难看,它似乎没有使用抽象的SQLAlchemy关系的强大功能.更重要的是它为每个add()生成单独的INSERT,而不是像obj.categories.extend([list])这样的大块INSERT.我想可能会有一些惰性对象模式让对象只能使用它的ID(未经验证)并仅在请求时加载其他字段.这将允许添加的孩子一到一对多或多对一一对多的关系,而不发出任何SELECT到数据库中,但让使用功能强大的ORM的抽象(即治疗儿童名单以Python列表).
我应该如何调整我的代码以使用SQLAlchemy的强大功能执行此任务,但对数据库的使用保守?
我基于此示例(https://developers.google.com/youtube/v3/quickstart/js)在内部使用的Web解决方案来检索YouTube视频统计信息现在无法正常工作。不知道确切的时间是什么,但是几个月前它就可以工作了。
我现在尝试运行未经编辑的示例代码(当然,除了调整CLIENT_ID之外),而且我得到的是完全相同的错误:
{
"domain": "usageLimits",
"reason": "accessNotConfigured",
"message": "Access Not Configured. YouTube Data API has not been used in project 123 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/youtube.googleapis.com/overview?project=123 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
"extendedHelp": "https://console.developers.google.com/apis/api/youtube.googleapis.com/overview?project=123" } ], "code": 403, "message": "Access Not Configured. YouTube Data API has not been used in project 123 before or it is disabled. …Run Code Online (Sandbox Code Playgroud) python ×6
flask ×4
amazon-ec2 ×1
apache ×1
javascript ×1
jinja2 ×1
midi ×1
ms-access ×1
odbc ×1
orm ×1
security ×1
sqlalchemy ×1
web ×1