我有一套相当复杂的sqlalchemy模型(所有模型都使用DeclarativeBase声明,通过flask-sqlalchemy的db.Model类).业务逻辑如下:
我准备了一个示例应用程序来演示核心功能:
#!/usr/bin/env python
from __future__ import print_function
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
import sqlalchemy_defaults
from flask.ext.script import Manager, Server
app = Flask(__name__)
app.config.update(
DEBUG=True,
SQLALCHEMY_DATABASE_URI=(
'postgresql://sqlareltest:sqlareltest' +
'@localhost:5432/sqlareltest'),
)
db = SQLAlchemy(app)
db.Column = sqlalchemy_defaults.Column
sqlalchemy_defaults.make_lazy_configured(db.mapper)
class Task(db.Model):
id = db.Column(db.Integer(), primary_key=True)
title = db.Column(db.String(255), default='')
def __repr__(self):
return self.title
class Submission(db.Model):
id = db.Column(db.Integer(), primary_key=True)
title = db.Column(db.String(255), default='')
def __repr__(self):
return self.title
class TaskQuestion(db.Model):
id = db.Column(db.Integer(), primary_key=True)
task_id = db.Column(db.Integer, …Run Code Online (Sandbox Code Playgroud) 试图让 OAuth2 Google 登录工作,这是我的应用程序发出的原始请求:
方法: POST
网址: https://www.googleapis.com/oauth2/v3/token
标题: Content-Type: application/x-www-form-urlencoded
价值观:
client_id: XXX-0123456789abcdef0123456789abcdef.apps.googleusercontent.com
client_secret: A1b2C3d4E5f6G7h8I9j0K1l2M
code: 1/A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v
grant_type: authorization_code
redirect_uri: http://localhost:5000/callback/google/
这是回应:
地位: 401 Unauthorized
身体:
{
"error": "invalid_client",
"error_description": "Unauthorized"
}
Run Code Online (Sandbox Code Playgroud)
已验证这是我的应用程序正在制作的确切请求/响应(使用 Flask 和 rauth 的 Python 应用程序),并已验证我可以使用 Postman 重现完全相同的请求/响应。
根据其他线程中的说明,我在 Google API 控制台中完成了以下所有操作:
无论我做什么,仍然得到相同的响应"invalid_client": "Unauthorized"。
对此的帮助将不胜感激。我正在尝试在我的应用程序中设置 OAuth2 驱动的“使用 X 登录”功能,已经让 Facebook 和 Twitter 正常工作,也想让 …
我有一个数据库表,其中每一行都是一种颜色.我的目标:给定输入颜色,计算它与DB表中每种颜色的距离,并按该距离对结果进行排序.或者,作为用户故事说明:当我选择一种颜色时,我希望看到与我选择的颜色最相似的颜色列表,其中最接近的匹配位于列表顶部.
据我所知,为了做到这一点,各种Delta E(CIE Lab)公式是最佳选择.我无法找到公式的任何本机SQL实现,所以我编写了自己的SQL版本的Delta E CIE 1976和Delta E CIE 2000.我根据python-colormath实现生成的结果验证了公式的SQL版本的准确性.
1976年的公式很容易用SQL或任何其他语言编写,因为它是一个简单的欧几里德距离计算.对于我来说,它对任何大小的数据集执行得很好而且快速(在具有100,000行的颜色表上测试它,并且查询花费不到1秒).
相比之下,2000年的公式非常漫长而复杂.我设法在SQL中实现它,但它的性能不是很好:查询10,000行大约需要5秒,查询100,000行大约需要1分钟.
我写了一个名为colorsearchtest的示例应用程序(在Python/Flask/Postgres中),以解决我的实现问题(我在Heroku上设置了一个演示).如果您试用这个应用程序,您可以清楚地看到1976年和2000年Delta E查询之间的性能差异.
这是颜色表的模式(对于每种颜色,它存储相应的RGB和Lab表示,作为三个数值):
CREATE TABLE color (
id integer NOT NULL,
rgb_r integer,
rgb_g integer,
rgb_b integer,
lab_l double precision,
lab_a double precision,
lab_b double precision
);
Run Code Online (Sandbox Code Playgroud)
这是表格中的一些数据(所有颜色都是随机颜色,由我的应用程序中的脚本生成):
INSERT INTO color (id, rgb_r, rgb_g, rgb_b, lab_l, lab_a, lab_b)
VALUES (902, 164, 214, 189, 81.6521019943304793,
-21.2561872439361323, 7.08354581694699004);
INSERT INTO color (id, rgb_r, rgb_g, …Run Code Online (Sandbox Code Playgroud) 当我尝试使用gpg2导入导出良好的gpg1密钥时,公钥导入工作正常:
gpg --import /path/to/publickey.gpg
gpg: directory '/home/me/.gnupg' created
gpg: new configuration file '/home/me/.gnupg/dirmngr.conf' created
gpg: new configuration file '/home/me/.gnupg/gpg.conf' created
gpg: keybox '/home/me/.gnupg/pubring.kbx' created
gpg: /home/me/.gnupg/trustdb.gpg: trustdb created
gpg: key ABCDEF1234567890: public key "Me <me@me.com>" imported
gpg: Total number processed: 1
gpg: imported: 1
Run Code Online (Sandbox Code Playgroud)
但是导入密钥失败(注意:使用时的结果相同--allow-secret-key-import):
gpg --import /path/to/secretkey.gpg
gpg: key ABCDEF1234567890: "Me <me@me.com>" not changed
gpg: key ABCDEF1234567890/ABCDEF1234567890: error sending to agent: No such file or directory
gpg: error building skey array: No such file or directory
gpg: …Run Code Online (Sandbox Code Playgroud) python ×2
algorithm ×1
colors ×1
flask ×1
gnupg ×1
google-api ×1
google-oauth ×1
oauth ×1
postgresql ×1
rauth ×1
relationship ×1
sqlalchemy ×1
ubuntu ×1