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
任何建议都会很棒.
我有两个java.util.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) 在Maven的文档介绍了一个属性说话project.build.finalName,但我找不到它被设置为基于其它值的值的定义pom.xml.
如果project.build.finalName在没有覆盖属性定义的情况下计算的值是pom.xml多少?
是否有可能,如果是,如何获得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实例中设置它的用途,但事实并非如此.
以下类定义了两种方法,两种方法都直观地具有相同的功能.使用两个类型列表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) 以下类包含一个成员变量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?
为了这个例子,让我们假设我有一个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"] }
我想知道是否以及如何使用流框架实现这一点.我得到的最好的是以下表达式,它返回一个包含完整元组作为值的映射,而不仅仅是它们的 …
据我所知,当使用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) 我正在尝试编译一个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 …
在下面的代码中,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)
为什么这段代码无效,即如果允许则会出错?