我为用户提供了典型的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'?
我有一个方法(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中实现基于SAML 2.0的服务提供程序.
我的网络应用程序目前都是Flask应用程序.我计划制作一个Flask蓝图/装饰器,允许我将单点登录功能放入预先存在的应用程序中.
我已经广泛研究了python-saml,不幸的是有依赖性问题不值得解决,因为我有太多预先存在的服务器/应用程序,而环境将无法兼容.
PySAML2看起来可以工作,但是文档很少,而且我可以理解哪些文档很难理解.Flask应用程序中没有使用PySAML2的示例.
我拥有的身份提供商是Okta.我有Okta设置,以便在我登录Okta后,我被重定向到我的应用程序.
任何人都可以提供有关使用PySAML2的任何建议,或者建议如何使用正在访问我的应用程序的SAML 2.0对用户进行最佳身份验证?
我有@login_required装饰器来装饰控制器动作.但是我的应用程序非常庞大,并且在许多不同的控制器文件中有大量路由.逐个去装饰每条路线似乎容易出错(我很容易错过)并且耗费时间.
有没有办法在整个应用程序中一次装饰所有路线?
我正在将身份验证从Web服务器(apache)移动到应用程序级别,这就是我遇到此问题的原因.
我正在创建一个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 …
我有一个如下所示的烧瓶应用程序:
@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 次初始化。做这个的最好方式是什么?
我创建了一个处理身份验证的蓝图.此蓝图使用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) 我有一个在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进程时进行一些清理.
有关最佳方法的任何想法吗?
在我的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) 我正在寻找 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)
关于正则表达式的任何建议?