小编del*_*boy的帖子

是否可以通过REST在POST后返回内容?

我正在使用RESTlet,我已经创建了一个资源.我通过重写acceptRepresentation方法来处理POST.

客户端应该向我发送一些数据,然后将其存储到DB,将响应设置为201(SUCCESS_CREATED)并且我需要将一些数据返回给客户端,但是返回类型的acceptRepresentation是无效的.

在我的情况下,我需要返回一些识别器,以便客户端可以访问该资源.

例如,如果我有一个带有URL /资源的资源,并且客户端发送POST请求,我在DB中添加新行,其地址应为/ resource/{id}.我需要发送{id}.

难道我做错了什么?REST原则是否允许在POST后返回一些内容?如果是的话,我怎么能这样做,如果没有办法处理这种情况呢?

java rest restlet

82
推荐指数
4
解决办法
7万
查看次数

使用ThreadPoolExecutor的龙卷风

我有Tornado用作http服务器和自定义http框架的设置.想法是拥有单个龙卷风处理程序,并且每个到达的请求都应该只是提交给ThreadPoolExecutor并留下Tornado来监听新的请求.一旦线程完成处理请求,就会调用回调,该回调会在执行IO循环的同一线程中向客户端发送响应.

剥离,代码看起来像这样.基本http服务器类:

class HttpServer():
    def __init__(self, router, port, max_workers):
        self.router = router
        self.port = port
        self.max_workers = max_workers

    def run(self):
        raise NotImplementedError()
Run Code Online (Sandbox Code Playgroud)

Tornado支持HttpServer的实现:

class TornadoServer(HttpServer):
    def run(self):
        executor = futures.ThreadPoolExecutor(max_workers=self.max_workers)

        def submit(callback, **kwargs):
            future = executor.submit(Request(**kwargs))
            future.add_done_callback(callback)
            return future

        application = web.Application([
            (r'(.*)', MainHandler, {
                'submit': submit,
                'router': self.router   
            })
        ])

        application.listen(self.port)

        ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

处理所有龙卷风请求的主处理程序(仅实现GET,但其他请求相同):

class MainHandler():
    def initialize(self, submit, router):
        self.submit = submit
        self.router = router

    def worker(self, request):
        responder, kwargs = self.router.resolve(request)
        response …
Run Code Online (Sandbox Code Playgroud)

python io multithreading tornado

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

如何在play框架中的会话中存储对象(不是字符串)?

我有一个学校项目,我必须使用Java.最近我找到了play框架,我想尝试使用它.这很容易快速启动,但我遇到了会话问题.

就其本质而言是无状态的,play会在cookie中将整个会话发送给用户并在下一个请求时接收它,因此它只允许会话中有限的数据量.

我想要做的是在用户登录时从数据库中获取User对象,并将其保存在会话中,这样我就可以从模板中访问它等等(我在User类中有一些方法需要调用以便自定义UI ),但如果我放置User对象,则调用其toString方法并将其放入会话中.

我发现推荐的方法是将大量数据放入Cache中,但我不知道如何从模板中访问它(我想我可以用@Before注释创建方法并将用户添加到renderArgs,但这似乎不太给我干净)另一个问题是Cache的生命周期有限,所以我的对象可能会消失.

有没有人有这种问题的经验?

有没有办法使用服务器端会话?我不需要这个项目的REST功能,因此,就我而言,应用程序可以保存状态...

java session caching playframework

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

Firefox api - 从我的程序访问

是否可以从我的程序访问Firefox信息?具体来说,我需要在活动标签中读取已打开网站的URL.这样的事情可能吗?

我想我可以写扩展,这将允许我做这样的事情,但我想知道它是否有一些FF api ...

firefox

10
推荐指数
1
解决办法
7966
查看次数

将多个孤立分支组合成一个分支

我有一个包含多个存储库的目录,它看起来像这样:

folder
|- repo1
|  |- .git
|  |- File1.txt
|- repo2
|  |- .git
|  |- File2.txt
|- repo3
|  |- .git
|  |- File3
Run Code Online (Sandbox Code Playgroud)

我想将它们组合成单个git存储库,我按照这些说明进行了操作.

在这些指令之后,我有以下结构:

folder
|- .git
|- repo1
|  |- File1.txt
|- repo2
|  |- File2.txt
|- repo3
|  |- File3
Run Code Online (Sandbox Code Playgroud)

这很棒.但是现在我有主分支(来自repo1)和历史上的两个孤儿分支:

* Merge repo3
|\
| * Add third file
* Merge repo2
|\ 
| * Add second file
* Add first file
Run Code Online (Sandbox Code Playgroud)

我想得到的是这样的

* Merge repo 3
* Add third file …
Run Code Online (Sandbox Code Playgroud)

git

7
推荐指数
1
解决办法
3877
查看次数

输入的算法复杂度是固定大小的

我找到了一些关于大O表示法的参考文献,但据我所知,算法复杂度是输入数据大小的函数.

例如,如果气泡的复杂性排序是O(n^2),n被输入数组的大小.对?

但是,我如何确定具有固定输入大小并取决于输入值的算法的复杂性.例如,找到最大公约数(GCD)将如下所示:

def GCD(x, y):
    while x != y:
        if x < y:
            x, y = y - x, x
        else:
            x, y = x - y, x
    return x
Run Code Online (Sandbox Code Playgroud)

这个算法的复杂性是什么?它是如何确定的?

编辑:更改了函数的名称和更正的算法名称.ShreevatsaR,谢谢你的指出.

algorithm big-o

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

表达式树 - 在外部lambda中编译内部lambda - 作用域解析

我正在创建表达式树,有一种情况我需要在另一个lambda中创建一个lambda并将一个lambda存储在一个类中并在表达式树中添加该类.这是我想要做的简单示例(此代码无法编译):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;

namespace SimpleTest {
    public class LambdaWrapper {
        private Delegate compiledLambda;
        public LambdaWrapper(Delegate compiledLambda) {
            this.compiledLambda = compiledLambda;
        }
        public dynamic Execute() {
            return compiledLambda.DynamicInvoke();
        }
    }

    public class ForSO {

        public ParameterExpression Param;

        public LambdaExpression GetOuterLambda() {
            IList<Expression> lambdaBody = new List<Expression>();
            Param = Expression.Parameter(typeof(object), "Param");
            lambdaBody.Add(Expression.Assign(
                            Param, 
                            Expression.Constant("Value of 'param' valiable"))
                          );

            lambdaBody.Add(Expression.Call(
                            null, 
                            typeof(ForSO).GetMethod("Write"), 
                            Param)
                          );

            Delegate compiledInnerLambda = GetInnerLambda().Compile();
            LambdaWrapper wrapper = new LambdaWrapper(compiledInnerLambda);
            lambdaBody.Add(Expression.Constant(wrapper));
            //lambdaBody.Add(GetInnerLambda()); …
Run Code Online (Sandbox Code Playgroud)

c# scope dynamic-language-runtime expression-trees

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

Django-对象级别权限和基于类的通用视图

这是模型:

class Car(models.Model):
    user = models.ForeignKey(User, related_name='cars')
    name = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)

网址模式如下所示:

url(r'^car/(?P<pk>\d+)/$', login_required(CarDetails.as_view()), name='car_details)
Run Code Online (Sandbox Code Playgroud)

并查看:

class CarDetail(DetailView):
    context_object_name = 'car'
    template_name = 'my_app/car_details.html'
    model = models.Car

    def get_object(self, *args, **kwargs):
        car = super(CarDetail, self).get_object(*args, **kwargs)
        if car.user != self.request.user:
            raise PermissionDenied()
        else:
            return car
Run Code Online (Sandbox Code Playgroud)

这很好用,但是在每个类中我都必须重写get_object以防止用户弄乱别人的对象。这包括对我拥有的每个模型进行编辑和删除,这严重违反了DRY原理。

有一个更好的方法吗?可能是login_required装饰器之类的东西?

编辑

正如Dr.Tyrsa在他的回答中所提出的,解决方案或多或少简单,只有一点点不同。我创建的基类CurUserOnly继承object,而不是DetailView(我想使用这个类DeleteViewUpdateView,太),现在CarDetail继承CurUserOnlyDetailViewCarDelete继承CurUserOnlyDeleteView等等......

有趣的是,我之前曾尝试过此方法,但由于我忘了python的MRO,并且DetailViewCurUserOnly应该成为继承列表的第一位时,它没有起作用!

最后,这是CurUserOnly …

python django permissions

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

具有ManyToMany字段的Diff django模型对象

我有一种情况,当DB中的某些内容发生变化时,我需要通知某些用户.我的想法是抓住pre_savepost_save发出信号并制作某种差异和邮件.一般来说它运作良好,但我不知道如何获得m2m字段的差异.

目前我有这样的事情:

def pre_save(sender, **kwargs):
    pk = kwargs['instance'].pk
    instance = copy.deepcopy(sender.objects.get(pk=pk))
    tracking[sender] = instance

def post_save(sender, **kwargs):
    instance = copy.deepcopy(kwargs['instance'])
    print diff(instance, (tracking[sender])) # TODO: don't print, save diff somewhere
Run Code Online (Sandbox Code Playgroud)

Diff函数应该适用于每个模型(在mommet我有四个模型类).使用深度复制,我可以保存旧模型,但我不知道如何保存m2m字段,因为它们在单独的表中(是的,我知道我可以获得这些数据,但在执行的时候我不知道哪些字段是m2m,我不想为每个型号创建不同的插槽).我想要的是通用解决方案,所以我可以稍后添加模型而不考虑通知部分.

我的计划是在调用插槽后调用get_data()clear_data()运行save(),以清理插槽生成的差异.

这是这样做的好方法吗?有没有更好的办法?是否有能为我做这项工作的django应用程序?

请原谅我的英语,这不是我的母语.

python django diff models

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