小编Eve*_*ert的帖子

我的第一个python程序:你能告诉我我做错了什么吗?

我希望这个问题适合stackoverflow.如果没有,我会马上删除这个问题.

我刚刚编写了我的第一个python程序.我们的想法是你可以发出一个命令,并将它并行发送到几个服务器.

这仅用于个人教育目的.该计划有效!我真的想在python上变得更好,因此我想问下列问题:

  1. 与PHP(我以前习惯)相比,我的风格看起来很混乱.您对样式改进有什么建议吗?
  2. 我使用正确的库吗?我正确使用它们吗?
  3. 我使用正确的数据类型吗?我正确使用它们吗?

我有一个很好的编程背景,但是我花了很长时间才开发出适合PHP的样式(PEAR编码标准,知道使用什么工具以及何时使用).

来源(一个文件,92行代码)

http://code.google.com/p/floep/source/browse/trunk/floep

python

6
推荐指数
3
解决办法
806
查看次数

使用HTTP PUT,但不完全替换实体

我正在开发一个REST api,我想知道以下内容:

我想使用HTTP PUT来更新webservice中的一些实体.格式将是一个urlencoded主体.仅更新实际指定的字段而不是整个实体是否可以接受?

我问,因为PUT是一个非常方便的方法来做一些更新,但我不希望它们删除字段,如果它们恰好拼错其中一些.另外,我不想强​​制实现者始终必须首先进行GET并复制他们可能实际上不使用的每个字段.

rest web-services http put

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

将数据导出为.sql格式.怎么逃避?

我正在编写一个导出工具,将输入的json数据转换为sql语句.

这个工具是(并且不应该)知道数据库连接,它应该只输出一个.sql,可以与其他工具一起使用来进行实际导入.

大多数mysqli - >*和PDO相关的函数都依赖于一个开放的连接(以确定像characterset这样的东西).有什么好办法可以解决这个问题?

php mysql sql sqlite escaping

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

在ICS首选项中转义% - 我是否真的必须编写特定于版本的字符串处理?

我有一个在ICS上崩溃的应用程序.到目前为止工作得很好(虽然我不确定我是否真的有一个蜂窝平台可以测试,我们所有的测试手机都是姜饼或更低的,现在我有几个ICS手机可以玩).

我的首选项页面中的以下代码(从onResume和OnPreferenceChangeListener调用)工作正常:

protected void setBatteryAlarmSummary(String newValue){
    Preference batteryAlarm = (Preference) findPreference( getString(R.string.battery_low_alarm) );
    StringBuilder summary = new StringBuilder();
    summary.append(getString(R.string.battery_alarm_summary_label));
    summary.append(" ");
    summary.append(newValue);
    summary.append("%");
    batteryAlarm.setSummary(summary);
}
Run Code Online (Sandbox Code Playgroud)

这会将pref摘要设置为"10%的低电量警报".现在,有了ICS,它崩溃了.不是当它执行setSummary时,而不是当页面显示时,但是当你甚至稍微滚动首选项时,显然会触发渲染(这个项目大约有8个左右的项目,所以它在列表中"低于" ).修复ICS很简单,只需要忽略百分号:

summary.append("%%");
Run Code Online (Sandbox Code Playgroud)

然而,姜饼上的代码显示"低电池警报10 %%"

我可以根据版本编写它来改变,但那只是愚蠢的.他们是否真的打破了他们的首选项渲染的向后兼容性,或者这只是一个三星的东西(不幸的是,它是我现在唯一的ICS测试平台)?

string android escaping preferences

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

扩展内置的JavaScript承诺

我正在尝试使用新方法扩展javascript承诺.在这种情况下调用这个新方法foo,它实际上是这样的:

Promise.foo = function(arg) {
  return this.then( function(result) {
    return result.foo(arg);
  });
};
Run Code Online (Sandbox Code Playgroud)

简而言之,foo()函数是等待promise解析然后在结果上调用foo()的快捷方式.

这个函数的本质是它可以被链接,就像then()可以一样.

myPromise.foo(a).foo(b).foo(c);
Run Code Online (Sandbox Code Playgroud)

我觉得这应该是可能的,但我不确定正确的道路是什么.

这就是我尝试过的:

var FooPromise = function() {
   Promise.apply(this, arguments);
}

FooPromise.prototype = Object.create(Promise.prototype);
FooPromise.foo = function(arg) {
  return this.then( function(result) {
    return result.foo(arg);
  });
};
Run Code Online (Sandbox Code Playgroud)

测试一下:

var test = new FooPromise(function(res, rej) {
   res('bla');
});
Run Code Online (Sandbox Code Playgroud)

在Firefox中,这给了我:

TypeError: calling a builtin Promise constructor without new is forbidden
Run Code Online (Sandbox Code Playgroud)

在节点中:

TypeError: #<Promise> is not a promise
Run Code Online (Sandbox Code Playgroud)

这只是javascript的限制,还是有办法解决这个问题?

javascript promise

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

访问控制设计模式

我正在开发PHP应用程序,我想为某些对象添加访问控制。我没有将此问题标记为PHP,因为我认为该问题不是特定于语言的。

说我有一个“服务等级”

abstract class Service {


}
Run Code Online (Sandbox Code Playgroud)

许多服务都将此作为基类。一个伪示例为:

class Companies extends Service {

  function getCompanyInfo($id) {
      //...
  }

}
Run Code Online (Sandbox Code Playgroud)

稍后,我要添加访问控制。示例的“ getCompanyInfoById”方法是“读取”操作,因此这将需要“读取”权限。

此时,我可以通过以下方式实现此目的:

  1. 将accesscontrol添加到Service类。在完成操作并返回结果之前,每个方法(例如getCompanyInfoById)都必须在内部调用“ hasPrivilege”方法。
  2. 将所有Service对象包装在某种Proxy对象中,该对象将在调用内部对象中的方法之前检查特权。
  3. 完全独立的访问控制,并在调用方法之前强制“调用方”检查特权。

每个选项的缺点:

  1. 这要求更改所有服务,并要求他们了解访问控制。我认为这与关注点分离背道而驰。
  2. 这会破坏OOP功能,例如多态。呼叫者不再知道任何服务支持什么接口。
  3. 这是最灵活的方法,但是最大的缺点是检查权限现在是隐式的。开发人员可以“忘记”或复杂的代码路径可能导致未经授权的服务被调用。

是否有更好的方法可以完全解决此问题?

authorization design-patterns access-control rbac abac

5
推荐指数
1
解决办法
2869
查看次数

在PHP中创建非英语目录

我希望能够以其名称为注册用户创建文件夹.他们的信息以西里尔字符存储在我的数据库中,并在创建文件夹时从他们的信息中删除.问题是,如果信息是英文的,一切都还可以,如果在西里尔语中,我会得到像Кульчманова这样的东西.一切都设置为utf-8.如果我将文件夹名称设置为'фыва',它就没有问题.

        $this->load->model('users_model');
    $i=$this->session->userdata('uid');
    $new_name=$this->input->post('doc_name');
    $folder=$this->users_model->getFullName($i); //$folder='????' works fine

    if(!is_dir("./uploads/".$folder)){
        mkdir("./uploads/".$folder , 0777);
    }
    $config['file_name'] = $new_name;
    $config['upload_path'] = './uploads/'.$folder.'/';
Run Code Online (Sandbox Code Playgroud)

将不胜感激任何帮助

php codeigniter

5
推荐指数
1
解决办法
225
查看次数

Javascript 和 CSP - 最佳实践

我想对我的 Web 应用程序使用内容站点保护。如果你还没有听说过它,简而言之:它允许我禁用任何嵌入到我的网络应用程序中的 javascript,帮助防止 XSS。

结果是,我所有的 javascript 代码都必须在外部文件中。

大多数 javascript 'library/framework' 代码已经是,但通常我的页面将包含至少几行 JS 代码,实例化与特定页面相关的组件。

例如,我有一个假设的注册页面。在注册页面的底部,我有以下代码:

var registrationForm = new MyApp.registrationValidator($('.regform'));
registrationForm.init();
Run Code Online (Sandbox Code Playgroud)

这个假想的代码得到了对注册表的引用,可以注册所有的验证码。

现在我必须将此代码移动到外部文件。我可以:

选项 A:为每个页面创建一个小的 .js 文件,该文件只执行特定于该页面的代码。

  • 优点 - 简单且相对较快
  • 缺点 - 这是每个页面的额外 js 文件,我更希望能够将所有 javascript 最小化到一个文件中以减少请求。

选项 B:在 javascript 文件中执行我所有的“实例化代码”。我只会检测页面上是否有任何“.regForm”css 类,并且仅在它们出现在页面上时才实例化我的对象。

  • 优点 - 用于实例化的单一位置。如果页面上的组件具有正确的 css 类,它们将神奇地开始工作。
  • 缺点 - 如果我的应用程序增长很多,将会有很多特定页面可能不需要的初始化代码。

选项 C:给我的<body>标签一个 id 或类,并根据一个大开关执行正确的代码。

  • 优点:仍然可以压缩为单个 .js 文件,我不需要每页一个 .js 文件。
  • 缺点:我想我觉得这有点难看。

总而言之,选项 B 是最好的,如果不是因为我觉得拥有大量初始化代码是个坏主意。

我主要想知道的是,您是否有过这种情况的经验,您是如何解决的?

javascript jquery content-security-policy

5
推荐指数
1
解决办法
1177
查看次数

OAuth2一次性授权以注册和丢失密码

我们正在构建主要由JS前端使用的REST服务。身份验证的主要手段是OAuth2。

我们使用password授权类型进行登录,但是我们遇到的一件事是:如何设计“丢失密码”功能。通常,这是通过允许用户输入其电子邮件地址,然后向其发送一次性令牌来完成的。

这需要以下条件:

  1. 未认证的端点。喜欢POST /lost-password并接受电子邮件地址。我意识到这并不是很轻松,但是我可以忍受。然后,此端点将带有一次性令牌的电子邮件发送给用户。
  2. 用户使用令牌返回前端后,我基本上希望允许客户端将该令牌交换为OAuth2承载令牌。

因此,我并没有grant_type在规范中真正看到此功能。我的问题是:

我是否应该扩展OAuth2并创建一个新的grant_type(特定于OAuth2支持的)新情况,以与OAUth2访问令牌交换1次身份验证令牌?

api passwords oauth oauth-2.0

5
推荐指数
1
解决办法
2732
查看次数

为什么 JavaScript 文件以 0 &amp;&amp; 0 结尾

深入研究@babel/core包,几乎每个转译的 .js 文件都以以下行结尾:

0 && 0
Run Code Online (Sandbox Code Playgroud)

这样做的目的是什么?

例如,请参阅transpiler-ast.js ,即transpiler-ast.ts的转译。

javascript babeljs

5
推荐指数
1
解决办法
196
查看次数