小编Feu*_*mel的帖子

@csrf_exempt不适用于基于通用视图的类

class ChromeLoginView(View):

     def get(self, request):
          return JsonResponse({'status': request.user.is_authenticated()})

     @method_decorator(csrf_exempt)
     def post(self, request):
          username = request.POST['username']
          password = request.POST['password']
          user = authenticate(username=username, password=password)
          if user is not None:
                if user.is_active:
                     login(request, user)
                     return JsonResponse({'status': True})
          return JsonResponse({'status': False})
Run Code Online (Sandbox Code Playgroud)

我期待帖子确实由csrf停止,但它返回403错误.

但是如果删除那个装饰器并在URLConf中执行此操作

url(r'^chrome_login/', csrf_exempt(ChromeLoginView.as_view()), name='chrome_login'),
Run Code Online (Sandbox Code Playgroud)

它会工作.

这里发生了什么?它不应该工作,因为我猜这就是method_decorator所做的.我正在使用python3.4和django1.7.1

任何建议都会很棒.

python django

52
推荐指数
3
解决办法
3万
查看次数

从一个可选或另一个获得价值

我有两个java.util.Optional实例,我想得到一个Optional:

  • 如果它有值,则具有第一个Optional的值.
  • 如果它有值,则具有第二个Optional的值.
  • 是空的既不是Optional也有值.

是否有直接的方法来做到这一点,即是否已经有一些API来做到这一点?

以下表达式会这样做,但我必须提到第一个可选的两次:

firstOptional.isPresent() ? firstOptional : secondOptional
Run Code Online (Sandbox Code Playgroud)

这正是com.google.common.base.Optional.or()如此,但Java 8的API中不存在该方法.


aioobe接受的答案列出了一些替代方法来克服这种遗漏OptionalAPI的权利,在这种情况下必须计算这样的值(这回答了我的问题).我现在选择在我的代码库中添加一个实用程序函数:

public static <T> Optional<T> or(Optional<T> a, Optional<T> b) {
    if (a.isPresent())
        return a;
    else
        return b;
}
Run Code Online (Sandbox Code Playgroud)

java optional java-8

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

project.build.finalName的价值是多少?

Maven的文档介绍了一个属性说话project.build.finalName,但我找不到它被设置为基于其它值的值的定义pom.xml.

如果project.build.finalName在没有覆盖属性定义的情况下计算的值是pom.xml多少?

maven

28
推荐指数
3
解决办法
4万
查看次数

获取datetime.datetime.fromtimestamp()使用的时区

是否有可能,如果是,如何获得datetime.timezone用于datetime.datetime.fromtimestamp()POSIX时间戳(自纪元以来的秒数)转换为datetime对象的时区(即UTC偏移或具有该偏移的实例)?

datetime.datetime.fromtimestamp()将POSIX时间戳转换为天真datetime对象(即没有a tzinfo),但使用系统的语言环境将其调整为当地时区和当时生效的UTC偏移量.

例如,使用日期2008-12-27午夜UTC(自纪元以来40*356*86400秒):

>>> datetime.datetime.fromtimestamp(40 * 356 * 86400)
datetime.datetime(2008, 12, 27, 1, 0)
Run Code Online (Sandbox Code Playgroud)

该时间戳datetime在早上1点被转换为对象(当时是在CET/CEST时区).100天后,这是结果:

>>> datetime.datetime.fromtimestamp((40 * 356 + 100) * 86400)
datetime.datetime(2009, 4, 6, 2, 0)
Run Code Online (Sandbox Code Playgroud)

现在是凌晨2点.这是因为到那时,DST是活跃的.

我希望它datetime.datetime.fromtimestamp()tzinfo在返回的datetime实例中设置它的用途,但事实并非如此.

python timezone

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

为什么三元运算符不像有边界通配符的泛型类型?

以下类定义了两种方法,两种方法都直观地具有相同的功能.使用两个类型列表List<? super Integer>和一个布尔值调用每个函数,该值指定应将哪些列表分配给局部变量.

import java.util.List;

class Example {
    void chooseList1(boolean choice, List<? super Integer> list1, List<? super Integer> list2) {
        List<? super Integer> list;

        if (choice)
            list = list1;
        else
            list = list2;
    }

    void chooseList2(boolean choice, List<? super Integer> list1, List<? super Integer> list2) {
        List<? super Integer> list = choice ? list1 : list2;
    }
}
Run Code Online (Sandbox Code Playgroud)

根据javac 1.7.0_45,chooseList1有效而chooseList2不是.它抱怨说:

java: incompatible types
  required: java.util.List<? super java.lang.Integer>
  found:    java.util.List<capture#1 of ? extends …
Run Code Online (Sandbox Code Playgroud)

java generics ternary-operator bounded-wildcard

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

为什么Java 8中的lambdas不允许对匿名类没有的成员变量进行前向引用?

以下类包含一个成员变量runnable,该变量使用匿名内部类的实例进行初始化.内部类引用相同的成员:

class Example {
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            System.out.println(runnable);
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

只要在分配成员之前未执行该方法并且JLS允许这样的引用,这就不是问题.

理论上,成员变量的声明可以转换为lambda表达式,如下所示:

Runnable runnable = () -> System.out.println(runnable);
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这在功能上等同于前面的示例,但它被javac 1.8.0_05以下错误消息拒绝:

Error:(2, 54) java: self-reference in initializer
Run Code Online (Sandbox Code Playgroud)

虽然这种说法是正确的,但我不明白为什么不允许这样做.这是故意不允许的,可能是因为lambda表达式被编译为不同的字节代码,如果它被允许会导致问题?或者刚被禁止,因为这些引用在匿名内部类中使用时已经存在问题?还是JLS作家无意中不允许这样做?或者它是一个错误javac

lambda javac java-8

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

在Collectors.groupingBy()中映射值

为了这个例子,让我们假设我有一个Tuple带有两个属性的简单类型:

interface Tuple<T, U> {
    T getFirst();
    U getSecond();
}
Run Code Online (Sandbox Code Playgroud)

现在我想将一个(first, second)元组集合转换为一个映射,该映射将每个first值映射到second具有该特定first值的元组中包含的所有值的集合.该方法groupSecondByFirst()显示了我想要的可能实现:

<T, U> Map<T, Set<U>> groupSecondByFirst(Set<Tuple<T, U>> tuples) {
    Map<T, Set<U>> result = new HashMap<>();

    for (Tuple<T, U> i : tuples) {
        result.computeIfAbsent(i.getFirst(), x -> new HashSet<>()).add(i.getSecond());
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

如果输入是[(1, "one"), (1, "eins"), (1, "uno"), (2, "two"), (3, "three")]输出的话{ 1 = ["one", "eins", "uno"], 2 = ["two"], 3 = ["three"] }

我想知道是否以及如何使用流框架实现这一点.我得到的最好的是以下表达式,它返回一个包含完整元组作为值的映射,而不仅仅是它们的 …

java functional-programming java-8 java-stream

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

我可以从FXML自动生成控制器类吗?

据我所知,当使用FXML描述Java FX场景时,手动编写控制器类,然后可以从.fxml文件中引用它的成员变量和方法.使用时加载场景FXMLLoader,成员变量设置为相应的场景元素,方法自动连接到相应的事件.这是有效的,但是非常麻烦,因为需要在两个地方进行更改,并且任何错误只会在运行时显示.

我见过其他GUI框架,它允许您从场景描述中生成控制器作为抽象类,需要实现它来访问场景元素并处理事件.我的意思的一个例子:

我将创建以下.fxml文件(例如,使用JavaFX Scene Builder):

<AnchorPane ... >
  <children>
     <Button fx:id="button" ... text="Button" onAction="#buttonPressed" />
  </children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)

在我的构建过程中的某个地方,.java将创建以下文件(例如,使用Maven插件):

abstract class TestController {
    protected final Parent root;
    protected final Button button;

    {
        // Load test.fxml file
        // Assign scene elements to root and button
        // Attach event handler to the button that calls buttonClicked()
    }

    protected abstract void buttonClicked(ActionEvent event);
}
Run Code Online (Sandbox Code Playgroud)

然后我可能会多次创建该控制器的具体实现:

final class …
Run Code Online (Sandbox Code Playgroud)

code-generation javafx fxml

14
推荐指数
3
解决办法
3万
查看次数

静态最终字段的非正向引用错误

我正在尝试编译一个javac拒绝非法前向引用错误的Java类,其中违规引用是引用字段之后的词法上.在显示相同行为时,尽可能地删除以下类:

java.util.concurrent.Callable并且许多用途Object仅用作占位符来删除不相关的代码片段.

public class Test {
    static final Object foo = method(new java.util.concurrent.Callable<Object>() {
        @Override
        public Object call() throws Exception {
            return bar;
        }
    });

    static final Object bar = foo;

    static Object method(Object binder) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用时编译javac Test.java,javac打印以下错误消息:

Test.java:9: illegal forward reference
    static final Object bar = foo;
                              ^
Run Code Online (Sandbox Code Playgroud)

所以编译器抱怨bar声明引用的foo同时foo应该在bar声明的范围内.但是一旦删除了barin foo的声明的引用,例如通过将第5行更改return …

java javac forward-declaration

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

当涉及类型参数时,无法将列表<List <?>>分配给List <List <?>>

在下面的代码中,get()调用它并将结果分配给类型为的变量List<List<?>>.get()返回a List<List<T>>并在类型参数T设置为的实例上调用?,因此它应该适合.

import java.util.List;

class Test {
    void foo(NestedListProducer<?> test) {
        List<List<?>> a = test.get();
    }

    interface NestedListProducer<T> {
        List<List<T>> get();
    }
}
Run Code Online (Sandbox Code Playgroud)

但IntelliJ IDEA和Oracle的javac1.7.0_45版都拒绝我的代码无效.这是'javac'的错误消息:

java: incompatible types
  required: java.util.List<java.util.List<?>>
  found:    java.util.List<java.util.List<capture#1 of ?>>
Run Code Online (Sandbox Code Playgroud)

为什么这段代码无效,即如果允许则会出错?

java generics

12
推荐指数
2
解决办法
1467
查看次数