这可能是重复的,但我无法在任何地方找到问题,所以我会继续问:
是否有一种从终端删除超级用户的简单方法,可能类似于Django的createsuperuser
命令?
在2.x中我们有一个看起来像的序列化器:
class FooSerializer(serializers.ModelSerializer):
bar = serializers.PrimaryKeyRelatedField()
class Meta:
model = Foo
Run Code Online (Sandbox Code Playgroud)
这实际上能够处理批量创建(传递list
作为JSON帖子请求的主体).在3.x中,此端点已损坏.我试图实现类似于DRF文档的东西
class FooListSerializer(serializers.ListSerializer):
def create(self, validated_data):
foos = [Foo(**item) for item in validated_data]
return Foo.objects.bulk_create(foos)
class FooSerializer(serializers.ModelSerializer):
bar = serializers.PrimaryKeyRelatedField(
queryset=Bar.objects.all()
)
class Meta:
model = Foo
list_serializer_class = FooListSerializer
Run Code Online (Sandbox Code Playgroud)
虽然这适用于单个创建请求,但当我尝试传递列表时,我收到错误:
AttributeError: 'FooListSerializer' object has no attribute 'object'
Run Code Online (Sandbox Code Playgroud)
我已经看到一些__init__
超级硬件,但似乎ListSerializer
在3.x中创建了类,必须有一个更清晰的方法来做到这一点.提前致谢.
我对单元测试很陌生,并试图找出最佳实践.我在这里看到了几个关于unit-test继承一个基类的问题,这个基类本身包含几个测试,例如:
class TestBase(unittest.TestCase):
# some standard tests
class AnotherTest(TestBase):
# run some more tests in addition to the standard tests
Run Code Online (Sandbox Code Playgroud)
我认为我从社区收集的是,为每个实现编写单独的测试并使用多重继承更好.但是,如果该基类实际上不包含任何测试 - 只是所有其他测试的助手.例如,假设我有一些基础测试类,我曾经用它来存储一些常用方法,如果不是所有其他测试都会使用这些方法.我们还假设我有一个models.py
被调用的数据库模型ContentModel
test_base.py
import webtest
from google.appengine.ext import testbed
from models import ContentModel
class TestBase(unittest.TestCase):
def setUp(self):
self.ContentModel = ContentModel
self.testbed = testbed.Testbed()
self.testbed.activate()
# other useful stuff
def tearDown(self):
self.testbed.deactivate()
def createUser(self, admin=False):
# create a user that may or may not be an admin
# possibly other useful things
Run Code Online (Sandbox Code Playgroud)
这似乎可以节省我所有其他测试的大量时间:
another_test.py
from …
Run Code Online (Sandbox Code Playgroud) 在KeystoneJS的一个项目上工作,我很难搞清楚猫鼬关系的位置.
根据keystone docs,假设我们有以下模型:User
和Post
.现在帖子与用户有关系,所以我会写:
Post.add({
author: { type: Types.Relationship, ref: 'User' }
});
Run Code Online (Sandbox Code Playgroud)
然后:
User.relationship({ path: 'posts', ref: 'Post', refPath: 'author' });
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够看到有关该用户的所有帖子,而无需查询两个用户和帖子.例如,如果我查询了一个用户对象,我希望能够user.posts
访问这些相关帖子.你能用mongoose/keystone做到这一点吗?
根据"Effective Go" golang.org/doc/effective_go
程序中的每个导出(大写)名称都应具有doc注释.
假设我在一个简单的Web应用程序上有一个视图处理程序
// Handle the front page of the website
func FrontPageView(w http.ResponseWriter, r *http.Request) {
controllers.RenderBasicPage(w, "frontPage")
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:godoc 真的有必要吗?也许我现在爱上了罗伯特·马丁的清洁代码,但它似乎是一个有效命名的变量,在这种情况下,FrontPageView
不再需要这样一个godoc.这可能是"必要的javadoc"的衍生/重复吗?或者"python docstrings是否必要?",但我确实想确保在学习一门新语言时我会坚持使用语言特定的规范方法.
如何捕获单个单元测试的时间,包括设置成本?
我有一个带有设置程序的测试基础,需要花费很多时间才能完成.我有几个测试从测试基础下来,我有一个装饰器,理论上应该打印出运行每个测试所需的时间:
class TestBase(unittest.TestCase):
def setUp(self):
# some setup procedure that takes a long time
def timed_test(decorated_test):
def run_test(self, *kw, **kwargs):
start = time.time()
decorated_test(self, *kw, **kwargs)
end = time.time()
print "test_duration: %s (seconds)" % (end - start)
return run_test
class TestSomething(TestBase):
@timed_test
def test_something_useful(self):
# some test
Run Code Online (Sandbox Code Playgroud)
现在,当我运行这些测试时,我发现我只打印测试运行所花费的时间,不包括设置时间.切线上,一个相关的问题可能是:最好处理测试框架之外的时间安排吗?
如果这是一个骗局,请提前道歉; 我搜索"_curried python"并获得了14个结果,然后简单地_curried"并且只有33个结果,并且似乎没有任何帮助......
问题:我遇到了我原本认为今天我们的代码库中的拼写错误,这里是嫌疑人:
student.recalculate_gpa()
Run Code Online (Sandbox Code Playgroud)
现在,我怀疑它是一个拼写错误,因为它student
是一个Student
没有recalculate_gpa
方法的类的实例.但是,它确实有一个calculate_gpa
方法:
class Student(User):
...
def calculate_gpa(self):
# some calculations...
Run Code Online (Sandbox Code Playgroud)
(User
标准的django用户类在哪里.)但是,代码没有错误,这对我没有意义.所以我做了检查,发现了这个:
... (a bunch of methods)
('calculate_gpa', <unbound method Student.calculate_gpa>),
... (some more methods)
('recalculate_gpa', <unbound method Student._curried>),
Run Code Online (Sandbox Code Playgroud)
奇怪,recalculate_gpa
是事实上的方法.但它究竟来自哪里呢?我在代码库中找到了"_curried"并没有发现任何内容,所以这必须是与Django相关的一些行为.当然,我希望在我们项目的某个地方,我们已经描述了动态命名函数是如何形成的,因为它recalculate
似乎是一个合理的衍生物calculate
,但老实说我不知道从哪里开始寻找.
因此,我的问题是:如何生成像上面那样的curried方法,我应该从哪里开始寻找我们自己的代码库是如何进行咖喱的?
非常感谢提前!
使用django.apps
Django 1.7中的新功能,我现在遇到的情况是Django版本将触发__init__
文件处理配置的方式.例如:
from django.apps import AppConfig
...
Run Code Online (Sandbox Code Playgroud)
不适用于1.6及以下.因此检查版本会很有用.我的问题:检查Django版本的规范方法是什么?
字符串比较?(这看起来很时髦)
if django.get_version() >= '1.7.0'
Run Code Online (Sandbox Code Playgroud)
或访问版本元组?
major_version == django.VERSION[0]
minor_version == django.VERSION[1]
if major_version >= 1 and minor_version >= 7
Run Code Online (Sandbox Code Playgroud)
显然,第二种方法会在2.0上失败,我们只能说meh ......当我到达那里时,我会越过那座桥,但这当然看起来并不优雅.
有第三种选择吗?提前致谢!
我对Angular和新的(今天)对Protractor比较新,所以我不确定如何提出这个问题 - 因此我不太确定那里是否有重复.下面是我们正在开发的更大,更复杂的应用程序的非常简化版本,但基本思想是相同的.
假设我有一个简单的网页:
<input id="my-input" ng-model="myValue">
<button id="submit-button" ng-click="doSomething()">
Click Me
</button>
Run Code Online (Sandbox Code Playgroud)
由简化的角度应用程序控制:
// some-angular-app.js
$scope.myValue = "";
$scope.computedValue = null;
$scope.doSomething = function() {
$scope.computedValue = "Hello World";
}
Run Code Online (Sandbox Code Playgroud)
基本上,当您单击按钮时,它会触发一个操作应用程序中变量的函数.在我们的例子中(如上所述),变量(即$scope.computedValue
)不以任何方式绑定到DOM - 实际上它们被编译并传递给我们的API使用的JSON请求.但是,我想测试这些值 - 例如:
// some-protractor-test.js
describe('form submission', function() {
it('should corretly set the computed value', function() {
browser.get('http://our.awesome-web.page');
element(by.css("#my-input")).sendKeys("Hello Input");
element(by.css("#submit-button")).click();
// ??? how to check that computedValue === "Hello World" ???
});
});
Run Code Online (Sandbox Code Playgroud)
可以使用Protractor以这种方式检查数据的状态,还是必须通过DOM元素处理与Angular应用程序的所有交互?
我正在寻找关于artoo.io机器人顶部发生的事情的解释.使用键盘驱动程序在此示例的顶部有一个声明:
require 'artoo'
connection :keyboard, adaptor: :keyboard
device :keyboard, driver: :keyboard, connection: :keyboard
Run Code Online (Sandbox Code Playgroud)
似乎显示了一些速记/替代语法,我喜欢这种简写的解释.我理解替代哈希语法::adapter => :keyboard
.
上面最后两行代码中发生了什么?什么是connection
?它是一个artoo
正在初始化的类吗?为什么没有new
?哪里:keyboard
来的?如果有更明确地表示关系的替代语法,您是否也可以显示它?