小编ste*_*eve的帖子

从路由引用current_user时的RESTful路由最佳实践?

我为用户提供了典型的RESTful路由:

/user/:id
/user/:id/edit
/user/:id/newsfeed
Run Code Online (Sandbox Code Playgroud)

但是,/user/:id/edit只有当id等于current_user的id时才能访问该路由.因为我只希望current_user有权编辑其配置文件.我不希望其他用户能够编辑不属于他们的配置文件.

什么是处理这种情况的最佳做法?

我应该按原样离开路由,并且如果current_user.id != param[:id]强制前端客户端调用api跟踪登录用户的id,则会出错?

我应该制作一条特殊路线/user/self/edit并在控制器中检查是否param[:id] == 'self'

rest ruby-on-rails

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

在Python中模拟子进程调用

我有一个方法(run_script)想测试.具体来说,我想测试一个调用subprocess.Popen发生.测试subprocess.Popen使用某些参数进行测试会更好.当我运行测试但是我得到了TypeError: 'tuple' object is not callable.

如何测试我的方法以确保实际使用模拟调用进程?

@mock.patch('subprocess.Popen')
def run_script(file_path):
  process = subprocess.Popen(['myscript', -M, file_path], stdout=subprocess.PIPE)
  output,err = process.communicate()
  return process.returncode

def test_run_script(self, mock_subproc_popen):
  mock_subproc_popen.return_value = mock.Mock(communicate=('ouput','error'), returncode=0)
  am.account_manager("path")
  self.assertTrue(mock_subproc_popen.called)
Run Code Online (Sandbox Code Playgroud)

python mocking

17
推荐指数
1
解决办法
2万
查看次数

Python中的SAML 2.0服务提供程序

我期待在Python中实现基于SAML 2.0的服务提供程序.

我的网络应用程序目前都是Flask应用程序.我计划制作一个Flask蓝图/装饰器,允许我将单点登录功能放入预先存在的应用程序中.

我已经广泛研究了python-saml,不幸的是有依赖性问题不值得解决,因为我有太多预先存在的服务器/应用程序,而环境将无法兼容.

PySAML2看起来可以工作,但是文档很少,而且我可以理解哪些文档很难理解.Flask应用程序中没有使用PySAML2的示例.

我拥有的身份提供商是Okta.我有Okta设置,以便在我登录Okta后,我被重定向到我的应用程序.

任何人都可以提供有关使用PySAML2的任何建议,或者建议如何使用正在访问我的应用程序的SAML 2.0对用户进行最佳身份验证?

python saml flask saml-2.0

13
推荐指数
1
解决办法
1万
查看次数

烧瓶:一次装饰每条路线?

我有@login_required装饰器来装饰控制器动作.但是我的应用程序非常庞大,并且在许多不同的控制器文件中有大量路由.逐个去装饰每条路线似乎容易出错(我很容易错过)并且耗费时间.

有没有办法在整个应用程序中一次装饰所有路线?

我正在将身份验证从Web服务器(apache)移动到应用程序级别,这就是我遇到此问题的原因.

python flask login-required flask-login

12
推荐指数
1
解决办法
3721
查看次数

在Rails中使用Reddit样式加权算法的Act_As_Votable

我正在创建一个rails应用程序,它具有实现Act_As_Votable gem的User和Post模型.

我希望用户能够对帖子进行upvote和downvote,但也希望通过weighted_score算法对帖子进行排名和排序,该算法考虑了创建帖子的upvotes,downvotes和time的数量.

我的weighted_score算法来自Reddit,在这里有更好的描述.

我的帖子模型:

class Post < ActiveRecord::Base
  belongs_to :user
  acts_as_votable

  # Raw scores are = upvotes - downvotes
  def raw_score
    return self.upvotes.size - self.downvotes.size
  end

  def weighted_score
    raw_score = self.raw_score
    order = Math.log([raw_score.abs, 1].max, 10)
    if raw_score > 0
        sign = 1
    elsif raw_score < 0
        sign = -1
    else
        sign = 0
    end
    seconds = self.created_at.to_i - 1134028003
    return ((order + sign * seconds / 45000)*7).ceil / 7.0
  end
end
Run Code Online (Sandbox Code Playgroud)

我想使用Acts_As_Voteable gem,因为它支持缓存,这可能会减少硬盘写入次数并节省时间.目前,帖子的weight_score可以动态计算,但不保存在数据库中,这意味着我不能对具有最高权重的帖子进行数据库排序.

如果我在帖子模型中创建了一个列,那么每次用户在帖子上投票时我都必须更新posts表,这违背了使用Acts_As_Tagable …

ruby ruby-on-rails

8
推荐指数
1
解决办法
845
查看次数

无需请求即可获取 Flask App 的 url

我有一个如下所示的烧瓶应用程序:

@app.before_first_request
def set_base_url():
  global base_url
  base_url = ?? # something like myflaskapp.com or http://192.168.0.5
  # Initialize some some stuff here...

if __name__ == "__main__":
    app = Flask(__name__)
    app.run(host='0.0.0.0', port=8000)
Run Code Online (Sandbox Code Playgroud)

我需要在收到任何请求之前获取应用程序的完整 url,以便对某些配置选项进行 1 次初始化。做这个的最好方式是什么?

python flask

8
推荐指数
1
解决办法
4497
查看次数

@login_required烧瓶app中的麻烦

我创建了一个处理身份验证的蓝图.此蓝图使用Flask-Login.并具有以下内容,以及未显示的更多代码.

在蓝图中我有以下内容:

from flask.ext.login import LoginManager
from flask.ext.login import UserMixin
from flask.ext.login import current_user
from flask.ext.login import login_required
from flask.ext.login import login_user
from flask.ext.login import logout_user

auth_print = Blueprint('auth_print', __name__)
login_manager = LoginManager()
login_manager.login_view = '/login'

class User(UserMixin):

  user_store = {}  # Stores the users that are already logged in.

  def __init__(self, user_id):
    self.user_store[user_id] = self  # add the user to the user_store
    self.username = user_id  # the user_id is in fact the username
    self.id = unicode(user_id)

  def sign_out(self):
    logout_user() …
Run Code Online (Sandbox Code Playgroud)

python flask login-required flask-login

8
推荐指数
1
解决办法
8458
查看次数

Apache终止Flask进程时如何调用函数?

我有一个在Apache HTTPD后面运行的Flask应用程序.Apache配置为具有多个子进程.

Flask应用程序在服务器上创建一个文件,其文件名称等于其进程ID.代码看起来像这样:

import os

@app.before_first_request
def before_first_request():
    filename = os.getpid()
    with open(filename, 'w') as file:
        file.write('Hello')
Run Code Online (Sandbox Code Playgroud)

当子进程被终止/结束/终止时,我希望Flask应用程序删除此文件.

删除文件并不是非常重要,因为这些文件不会占用太多空间,因此如果发生奇怪的错误,我不需要处理它们.但是对于正常的工作流程,我希望在Apache关闭Flask进程时进行一些清理.

有关最佳方法的任何想法吗?

python apache termination flask

8
推荐指数
1
解决办法
1684
查看次数

如何检索相对于svg视图框的元素坐标?

在我的index.html中,我有一个svg视图框:

<svg viewBox = "0 0 2000 2000" version = "1.1">
</svg>
Run Code Online (Sandbox Code Playgroud)

我希望为我创建的svg椭圆设置动画,以便在单击椭圆时,它会垂直移动到某个y点,我们将调用TOP,如果再次单击,则移回其原始位置,称为BOTTOM.目前我使用的代码在某种程度上起作用.

var testFlag = 0;    
d3.select("#ellipseTest").on("click", function(){
if (testFlag == 0){
  d3.select(this)
      .attr("transform", "translate(0,0)")
      .transition()
        .duration(450)
        .ease("in-out")
        .attr("transform", "translate(0,-650)")
    testFlag = 1;
}else{
 d3.select(this)
      .attr("transform", "translate(0,-650)")
      .transition()
        .duration(450)
        .ease("in-out")
        .attr("transform", "translate(0,0)")
testFlag = 0;
}
});
Run Code Online (Sandbox Code Playgroud)

然而,问题是我还将椭圆拖动到TOP点并下降到BOTTOM点.因此,如果我将椭圆拖动到TOP和BOTTOM之间的中间位置,然后单击椭圆,它会 TOP 上方垂直设置动画,而不是在它到达TOP时停止(当动画向下时,对于BOTTOM也是如此).这似乎是transform转换方法的工作原理.我相信如果我创建一个函数来动态返回椭圆相对于鼠标点击的位置(或者更好的是,椭圆当前位置的位置)的数量,我可以解决这个问题.问题是我无法弄清楚如何获取元素相对于视图框的当前y位置,而我只能得到相对于整个页面的位置.

这是我用来获取点击位置的错误代码:

var svg2 = document.getElementsByTagName('svg')[0];
var pt = svg2.createSVGPoint();
document.documentElement.addEventListener('click',function(evt){    
    pt.x = evt.clientX;
    pt.y = evt.clientY;
    console.log('Position is.... ' + pt.y);
},false);
Run Code Online (Sandbox Code Playgroud)

这是我的工作代码,使椭圆可拖动:

//These points are all …
Run Code Online (Sandbox Code Playgroud)

javascript svg google-chrome viewbox d3.js

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

正则表达式匹配行尾

我正在寻找 BASH 正则表达式来从以下命令中提取“db”参数。但是,不能保证参数的顺序。出于某种原因,我无法让它完全工作。

到目前为止我所拥有的

regex="--db (.*)($| --)"
[[ $@ =~ $regex ]]
DB_NAMES="${BASH_REMATCH[1]}"

# These are example lines
somecommand --db myDB --conf /var/home # should get "myDB"
somecommand --db myDB anotherDB manymoreDB --conf /home # should get "myDB anotherDB manymoreDB" 
somecommand --db myDB # should get "myDB"
somecommand --db myDB anotherDB # should get "myDB anotherDB"
Run Code Online (Sandbox Code Playgroud)

关于正则表达式的任何建议?

regex bash

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