简要了解我目前的设置:
用于收集Python脚本数据的HTML表单
PHP将表单数据(POST)插入到输入MySQL表
中 PHP public class AuthorizationController : Controller
{
private OpenIddictUserManager<ApplicationUser> _userManager;
public AuthorizationController(OpenIddictUserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
[HttpPost("~/connect/token")]
[Produces("application/json")]
public async Task<IActionResult> Exchange()
{
var request = HttpContext.GetOpenIdConnectRequest();
if (request.IsPasswordGrantType())
{
var user = await _userManager.FindByNameAsync(request.Username);
if (user == null)
{
return BadRequest(new OpenIdConnectResponse
{
ErrorDescription = "The username or password provided is incorrect"
});
}
var identity = await _userManager.CreateIdentityAsync(user, request.GetScopes());
// Add a custom claim that will be persisted
// in both the access and the identity tokens.
if (user.Avatar != null)
{
identity.AddClaim("user_avatar", user.Avatar,
OpenIdConnectConstants.Destinations.AccessToken,
OpenIdConnectConstants.Destinations.IdentityToken);
}
if (user.InSiteUserName != null)
{
identity.AddClaim("insite_username", user.InSiteUserName,
OpenIdConnectConstants.Destinations.AccessToken,
OpenIdConnectConstants.Destinations.IdentityToken);
}
identity.AddClaim("hasLoggedIn", user.HasLoggedIn.ToString(),
OpenIdConnectConstants.Destinations.AccessToken,
OpenIdConnectConstants.Destinations.IdentityToken);
// Create a new authentication ticket holding the user identity.
var ticket = new AuthenticationTicket(
new ClaimsPrincipal(identity),
new AuthenticationProperties(),
OpenIdConnectServerDefaults.AuthenticationScheme);
ticket.SetResources(request.GetResources());
ticket.SetScopes(request.GetScopes());
return SignIn(ticket.Principal, ticket.Properties, ticket.AuthenticationScheme);
}
return BadRequest(new OpenIdConnectResponse
{
Error = OpenIdConnectConstants.Errors.UnsupportedGrantType,
ErrorDescription = "The specified grant type is not supported."
});
}
}
}
的Python3.4 script.py row_id
Python使用exec
收集行ID并运行代码并将结果插入到输出MySQL表中。当完整的PHP显示报告(PHP等待Python完成时,我使用sys.argv[1]
转到报告URL)。
报告页面是html,输出的MySQL表格中填充了PHP填空的空白。
这对我来说测试和开发都很好。当我将它发布到公司内部以进行更一般的测试时,问题出现了 - 它托管在VPS服务器上,当服务器运行多个Python实例时,它像狗一样运行(正如我们在苏格兰所说,因为说慢就太容易了。)
当然,托管公司建议升级,我们做了,并且容量增加了一倍(从1,有时2个同时运行,到2个有时3个)。我现在得出结论,这种方法不可扩展,我们总是会遇到某种限制。
所以我一直在关注亚马逊网络服务,但要做到这一点需要改变Python设计的理念 - 它必须一直运行并以某种方式提供数据(据我所知)。
亚马逊的建议是Flask或类似的框架,但这意味着我要么有两个网络服务器,要么必须进行某种跨域数据传输,要么废弃我所做的 - 或者至少大量修改我的在Web服务器上运行的PHP / HTML / JS,以便它可以由Flask提供,并且全部由AWS托管。
除非有人可以建议不需要Web框架的另一种通信方式,否则我一直在考虑只是间歇地轮询MySQL数据库并处理任何新数据,或者将数据库迁移到Postgre,我相信,允许Python代码在数据库结构中运行,并使我能够在插入时触发(我相信MySQL中的用户定义触发器仅支持C / C ++)。
感谢您提出任何建议或指出我失踪的事情。
布莱尔