小编sa1*_*125的帖子

Rails - 如何显示缩进的JSON?

我有一个控制器动作,为api目的返回JSON数据,还有很多.我希望能够在浏览器中检查它,并为观众提供良好的缩进.例如,如果我的数据是

data = { :person => { :id => 1, :name => "john doe", :age => 30 }, :person => ... }
Run Code Online (Sandbox Code Playgroud)

我想看看

{ "person" : 
    { 
        "id"   : 1, 
        "name" : "john doe",
        "age"  : 30,
    }, 

   "person" : 
    { 
        "id"   : 2, 
        "name" : "jane doe",
        "age"  : 31,
    },

    ...etc
}
Run Code Online (Sandbox Code Playgroud)

在视图中.

我想过使用不同的路径来获取批量/漂亮的数据:

# GET /api/json
# ...
respond_to do |format|
  format.html { render :json => data.to_json }
end

# GET /api/json/inspect
# ...
respond_to do |format| …
Run Code Online (Sandbox Code Playgroud)

json ruby-on-rails pretty-print

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

django - 限制用户只能编辑他们自己的信息

我正在玩 django 并构建了一个小应用程序,用户可以在其中通过 url http:///localhost:8000/username/info/访问他们的信息。我想添加通过http:///localhost:8000/username/info/edit/编辑该信息的功能,但还想确保当前登录的用户(使用 django.contrib.auth)只能访问他的信息。我通过在视图中执行以下操作来完成此操作(视图 args 中的用户名是从 url 中捕获的):

@login_required
def edit_info(request, username=''):
    if request.user.username == username:
        # allow accessing and editing the info..
    else:
        # redirect to some error page
Run Code Online (Sandbox Code Playgroud)

所以,显然,我不希望用户“johnny”通过简单地将他的浏览器指向/jimmy/info/edit/来编辑属于用户“jimmy”的信息。以上工作,但我担心的是,就安全而言,我在这里遗漏了一些东西。这是解决这个问题的正确方法吗?谢谢。

security django django-authentication

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

C - 尝试从stdin读取单个char(并且失败)w/scanf/getchar

作为家庭作业的一部分,我试图从stdin读取一个字符,并根据它行事:

char choice;

while (1) {
    printf("please enter [y]es, [n]o or [m]aybe: ");
    scanf("%c", choice);
    fflush(stdin);
    // validate input
    if (choice == 'y' || choice == 'n' || choice == 'm') {
        break;
    } else {
      printf("Please enter only \'y\', \'n\' or \'m\'!\n");
    }
}
// do something with the input
if (choice == 'y') {
    printf("you selected yes!\n");
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,scanf捕获了char和line-feed之后,因此它继续对输入执行某些操作,然后还打印"请仅输入'y','n'或'm'!" 线.如果我在stdin上输入几个字符,它将为所有字符打印该行,同时也为第一个字符正确执行.所以,例如:

$ ./run
please enter [y]es, [n]o or [m]aybe: y<return>
you selected yes!
Please enter only 'y', 'n' or …
Run Code Online (Sandbox Code Playgroud)

c scanf

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

Rails - 为什么RAILS_ROOT/lib中的模型在生产模式下不可用?

我有一个位于RAILS_ROOT/lib文件夹中的类,我在其中一个帮助器中使用它,它在开发中很有用.

当我切换到生产时,应用程序抛出一个NameError (uninitialized constant SomeHelper::SomeClass),我必须在帮助器中手动加载它:

load "#{Rails.root}/lib/some_class.rb"

module SomeHelper
  def some_method
    sc = SomeClass.new
    # blah
  end
end
Run Code Online (Sandbox Code Playgroud)

我的印象是RAILS_ROOT/lib/*里面的所有内容都应该可以在应用程序中使用 - 我需要配置什么才能在prod模式下实现这一点?谢谢.

ruby-on-rails production-environment

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

Java Hadoop:我如何创建作为输入文件的输出器并给出一个输出,即每个文件中的行数?

我是Hadoop的新手,我只是运行wordCount示例:http://hadoop.apache.org/common/docs/r0.18.2/mapred_tutorial.html

假设我们有一个包含3个文件的文件夹.我希望每个文件都有一个映射器,这个映射器只计算行数并将其返回到reducer.

然后,reducer将输入每个映射器的行数作为输入,并将所有3个文件中存在的总行数作为输出.

所以,如果我们有以下3个文件

input1.txt
input2.txt
input3.txt
Run Code Online (Sandbox Code Playgroud)

并且映射器返回:

mapper1 -> [input1.txt, 3]
mapper2 -> [input2.txt, 4]
mapper3 -> [input3.txt, 9]
Run Code Online (Sandbox Code Playgroud)

减速器将输出

3+4+9 = 16 
Run Code Online (Sandbox Code Playgroud)

我在一个简单的java应用程序中完成了这个,所以我想在Hadoop中完成它.我只有一台计算机,并希望尝试在伪分布式环境中运行.

我怎样才能实现这个目标?我应该采取什么适当的措施?

我的代码应该在apache的示例中看起来像那样吗?我将有两个静态类,一个用于mapper,一个用于reducer?或者我应该有3个类,每个映射器一个?

如果你能指导我完成这个,我不知道如何做到这一点,我相信如果我设法编写一些代码来做这些东西,那么我将来能够编写更复杂的应用程序.

谢谢!

java distributed hadoop mapreduce

5
推荐指数
2
解决办法
8231
查看次数

ImageMagick-如何将白色水平展平为纯白色?

我有一个白色背景的png图像,我想将其变为透明。这是相当简单的用这个命令:

$ convert image.png -transparent white image-trans.png
Run Code Online (Sandbox Code Playgroud)

但是,如果白色背景不完全是白色的(即#FFFFFFrgb(255,255,255)等等),那么这并不能很好的工作。

有没有办法将所有颜色降低到一定阈值以下才能完成白色处理?谢谢。

imagemagick transparent levels threshold

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

在Mongoid中使用AND和OR的组合

我想构建一个表单的查询:

select * from some_table
where 
  (field1 = 'x' or field2 = 'y') 
  and 
  (field3 = 'z' or field4 = 'w')
Run Code Online (Sandbox Code Playgroud)

从阅读文档,我认为它应该看起来像这样Mongoid:

SomeTable.or({:field1 => 'x'}, {:field2 => 'y'})
         .and  #  or is it .intersect?
         .or({:field3 => 'z'}, {:field4 => 'w'})
Run Code Online (Sandbox Code Playgroud)

但那不起作用 - mongo选择器只是所有字段的"$或".这样做的正确方法是什么?谢谢.

我也很欣赏它的反转,例如 - 如何执行此查询:

select * from some_table
where 
  (field1 = 'x' and field2 = 'y') 
  or
  (field3 = 'z' and field4 = 'w') 
Run Code Online (Sandbox Code Playgroud)

syntax multiple-conditions mongoid

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

Ruby的法拉第 - 多次包含相同的参数

我正在使用一个API,它强制我多次发送相同参数的名称以级联不同的过滤条件.所以示例api GET调用如下所示:

GET http://api.site.com/search?a=b1&a=b2&a=b3&a=c2
Run Code Online (Sandbox Code Playgroud)

我正在使用Faraday作为我的REST适配器,它将其URL参数作为哈希(因此 - 它具有唯一键).这意味着我不能做这样的事情:

response = Faraday.new({
  url: 'http://api.site.com/search'
  params: { a: 'b1', a: 'b2', a: 'b3', a: 'c2' } # => nay
}).get
Run Code Online (Sandbox Code Playgroud)

我在发送请求之前试图破解网址:

connection = Faraday.new(url: 'http://api.site.com/search')
url        = connection.url_prefix.to_s
full_url   = "#{ url }?a=b1&a=b2&a=b3&a=c2"
response   = connection.get( full_url )
Run Code Online (Sandbox Code Playgroud)

哪个不起作用 - 当我调试响应时,我看到发送到API服务器的实际url是:

GET http://api.site.com/search?a[]=b1&a[]=b2&a[]=b3&a[]=c2
Run Code Online (Sandbox Code Playgroud)

我无法更改API.有没有办法继续与法拉第合作并以优雅的方式解决这个问题?谢谢.

api url-parameters faraday

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

在不调用服务器的情况下初始化角度资源对象实例

Backbone.js,可以使用预先存在的JSON数据来实例化模型

var user = new Backbone.Model({ name: "John Doe", age: 30 });
Run Code Online (Sandbox Code Playgroud)

然后通过一次调用执行更新

user.save({ age: 31 }, { success: successCallback, error: errorCallback });
Run Code Online (Sandbox Code Playgroud)

这在各种场景中都很方便,例如当客户端通过缓存或预先填充的模板(例如<%= raw @user.to_json %>在rails erb模板中使用)可以获得该数据时.

我很好奇,想知道使用时,如何做到这一点$resourceAngular.js.现在,我有一种情况,我的数据在$resource创建之前缓存在客户端上,并且我想更新它而不需要额外GET调用来填充对象:

app.factory('User', ['$resource', function($resource) {
    return $resource('/users/:user_id.json', { user_id: '@id' }, {
        get: { method: 'GET' },
        save: { method: 'PUT' },
        create: { method: 'POST' },
        destroy: { method: 'DELETE' }
    });
}]);
Run Code Online (Sandbox Code Playgroud)

在我的控制器中的某个地方,我只想更新现有用户而不从服务器获取它:

app.controller('UsersController', ['User', function(User) {
    // …
Run Code Online (Sandbox Code Playgroud)

caching angularjs angular-resource

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

Angular - 我可以从角度应用程序外部广播消息吗?

我有一个场景,我需要非角度代码(在这种情况下Facebook和Twitter JS sdk)来广播角度控制器可以收听的事件.为什么?在初始页面加载后,我通过AJAX加载和修改页面中的内容.内容有多个喜欢/推特按钮(如博客/聚合器的首页).我想在Facebook"喜欢"按钮或Twitter"分享"按钮上发生点击时添加事件挂钩 - 页面中有一些,每当获取新内容时每个都在变化(再次,通过ajax ).

现在,SDK的处理方式不同:

推特

twttr.events.bind('click', function(event){
    // here I'd like to somehow
    // $rootScope.$broadcast("twitter:clicked", event.currentTarget)
});
Run Code Online (Sandbox Code Playgroud)

Facebook的

FB.Event.subscribe("edge.create", function(resp) {
    // here I'd like to somehow
    // $rootScope.$broadcast("facebook:clicked", resp)
});
Run Code Online (Sandbox Code Playgroud)

一些控制器

app.controller("SomeController", ['$scope', function($scope) {
    $scope.$on("facebook:clicked", function(event, resp) {
        // do something with resp
    });

    $scope.$on("twitter:clicked", function(event, target) {
        // do something target
    });
}])
Run Code Online (Sandbox Code Playgroud)

我们的想法是绑定这些事件处理程序,然后处理相关控制器中的广播消息,即使每次获取新内容时都会重新创建这些控制器.

所以基本上,我正在寻找的是一种挂钩现有的已经初始化的角度应用程序$rootScope$broadcast消息的方法,尽管它不是应用程序的一部分.希望这是有道理的.谢谢.

external broadcast angularjs rootscope

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