小编pow*_*wlo的帖子

django - 让用户登录测试客户端

在书面的django测试中,如何获取当前登录的用户?

例如,这是我想写的测试:

def test_author_set_once(self):
    self.client.login(username='Adam', password='password')
    #create an object and test the author is adam
    self.client.login(username='Barry', password='password')
    #modify the first object and test that the author has not changed
Run Code Online (Sandbox Code Playgroud)

所以我希望能够说出类似......

self.assertEqual(object.author, self.client.user)
Run Code Online (Sandbox Code Playgroud)

(但我不能)

我此刻编码的方式是这样的:

self.client.login(username='Adam', password='password')
self.user = User.objects.get(username='Adam')
#create an object 
self.assertEqual(object.author, self.user)
Run Code Online (Sandbox Code Playgroud)

这依赖于request.user与特定用户对象相同的假设.我想这没关系,但看起来有点笨重.

反正有没有避免这个假设?

testing django

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

python mock:@wraps(f)问题

我想测试一个我写的简单装饰器:

它看起来像这样:

#utilities.py
import other_module
def decor(f):
    @wraps(f)
    def wrapper(*args, **kwds):
            other_module.startdoingsomething()
        try:
            return f(*args, **kwds)
        finally:
            other_module.enddoingsomething()
    return wrapper
Run Code Online (Sandbox Code Playgroud)

然后我用python-mock测试它:

#test_utilities.py
def test_decor(self):
    mock_func = Mock()
    decorated_func = self.utilities.decor(mock_func)
    decorated_func(1,2,3)
    self.assertTrue(self.other_module.startdoingsomething.called)
    self.assertTrue(self.other_module.enddoingsomething.called)
    mock_func.assert_called_with(1,2,3)
Run Code Online (Sandbox Code Playgroud)

但它踢回来:

Traceback (most recent call last):
  File "test_utilities.py", line 25, in test_decor
    decorated_func = Mock(wraps=self.utilities.decor(mock_func))
  File "utilities.py", line 35, in decor
    @wraps(f)
  File "/usr/lib/python2.7/functools.py", line 33, in update_wrapper
    setattr(wrapper, attr, getattr(wrapped, attr))
  File "/usr/local/lib/python2.7/dist-packages/mock.py", line 660, in __getattr__
    raise AttributeError(name)
AttributeError: __name__
Run Code Online (Sandbox Code Playgroud)

我知道functools.wraps()只是一个帮手包装器.所以如果我把它拿出去测试就行了.

我可以让模拟玩functools.wraps()吗?

Python 2.7.3

python unit-testing mocking python-2.7 functools

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

绑定放大器状态的初始值

我要初始化一个放大器状态,如下所示:

<amp-state id="tabs">
  <script type="application/json">
  {
    "selected": "latest"
  }
  </script>
</amp-state>
Run Code Online (Sandbox Code Playgroud)

然后将这个初始化值显示在首页请求中:

<p [text]="tabs.selected"><p>
Run Code Online (Sandbox Code Playgroud)

这行不通。p标签的内容仅在状态更改时才更新。例如,通过按钮:

<button on="tap:AMP.setState({tabs: {selected: 'top'}})">Press me</button>
Run Code Online (Sandbox Code Playgroud)

我希望页面上的元素能反映出进一步的用户交互之前的初始化状态。

Codepen:https://codepen.io/powlo/pen/VMpVRm/ editors = 1000

amp-html

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

邮递员:更具描述性的TV4验证错误消息

我正在使用邮递员来验证从api返回的json数据的架构。

我有一个通过基本的HTTP验证运行的测试,然后以:

if (tv4.error){
    console.log("Validation failed: ", tv4.error);
}
Run Code Online (Sandbox Code Playgroud)

我回来的错误很难理解。

验证失败:12:22:41.316
对象:{}
消息:“无效的类型:数字(预期的字符串)”
名称:“ ValidationError”
类型:“ Error”

但是我需要知道验证失败的领域。我如何获得此信息?tv4npm页面建议该错误消息应更具描述性。

api json node.js postman tv4

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

显示导入器的详细信息

在Django中,我有一个发布折旧警告的包(django.views.generic.simple).如果这个警告描述了哪里进行导入将是有用的,因此编码器可以进入并更改文件而无需单步执行代码来查找它.

一般情况就是如此

#file1.py
import file2.py

#file2.py
import warnings
warnings.warn(
'Package deprecated: imported from %s' % __importer__,
DeprecationWarning
)
Run Code Online (Sandbox Code Playgroud)

其中__importer__是包含"file1.py"的虚构属性,或某些此类引用.

有没有办法做到这一点?

python import

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

渲染textfield和charfield扼杀额外的空格(Django/Python)

我注意到我的模板正在渲染我的model.CharField和model.TextField而没有任何多余的空格.

例如,如果我输入数据,如...

This     is a           test


to see what  happens.
Run Code Online (Sandbox Code Playgroud)

渲染的对象字段将显示为......

This is a test to see what happens.
Run Code Online (Sandbox Code Playgroud)

这是Django的故意特征还是我错过了某些过滤器或参数?

我用一些调试代码(print object.field)检查了字段本身,它确实包含额外的空格,所以问题出在渲染方面.

如何允许用户在TextFields中输入数据段落?如何保留用户可能输入的空白​​?

python django rendering textfield

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

Django/Python:电子邮件回复更新到网站

我正在研究的Django网站在内容更新时发送电子邮件.

我想添加的功能是用户可以回复这些邮件,即对主题发表评论.然后,此回复会在页面上显示更新.

解决这个问题的好方法是什么?有没有可以放入的模块?

python email django

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

Django 管理员:使用“editable=False”编辑模型字段

我希望管理员能够编辑普通用户无法编辑的字段。例如作者或订阅者等。

我试过这个:Django admin:如何在模型中显示一个标记为 editable=False' 的字段?

(答案中给出的可编辑部分)

但是该字段仍然无法出现在管理页面上。

这里有一些信息供参考:

#models.py
class MyModel(models.Model):
    myfield = models.ManyToManyField(User, blank=True, editable=False)

#admin.py
class MyModelAdminForm(forms.ModelForm):
    myfield = models.ManyToManyField(User, blank=True, editable=True)

    class Meta(object):
        model = MyModel

class MyModelAdmin(admin.ModelAdmin):
    form = MyModelAdminForm

admin.site.register(MyModel, MyModelAdmin)
Run Code Online (Sandbox Code Playgroud)

如果我将模型更改为状态 editable=True 那么我会在我的管理页面上看到该字段。(如预期)

我正在使用 Django 1.3,Python 2.6

django django-forms django-admin

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

如何在表单完成期间设置外键(python/django)

在表单处理期间,我希望能够在模型对象上设置外键字段,而无需用户从下拉列表中选择键.

例如:

#models.py
class AAA(models.Model):

    some_field = models.TextField()

class BBB(models.Model):
    another_field = models.TextField()
    key_field = models.ForeignKey('AAA')
Run Code Online (Sandbox Code Playgroud)

用户将从显示"AAA"实例的视图导航到create_object样式视图,该视图将在给定参考"AAA"的参数的情况下创建"BBB"实例.外键在代码中设置为指向'AAA'实例.

django评论框架似乎这样做,但我无法弄清楚如何.

有任何想法吗?我相信它应该很简单.

python forms django foreign-keys

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

由于导入机制导致的isinstance()和type()等效失败(python/django)

在我正在研究的Django项目中,我在视图中导入一个表单,如下所示

#views.py
from forms import SomeForm
Run Code Online (Sandbox Code Playgroud)

然后在我的测试文件中

#form_test.py
from app.forms import SomeForm    
.
.
.
self.assertTrue(isinstance(response.context['form'], SomeForm))
Run Code Online (Sandbox Code Playgroud)

为什么这个实例不起作用?

如果我检查两个对象的type()输出,我得到这个:

response.context form:预期形式:

我可以通过使views.py中的导入机制与form_test.py中的导入机制相匹配来解决这个问题,但这似乎是错误的方法.

供参考,文件结构如下:

  • 现场/
    • manage.py
    • 应用程序/
      • forms.py
      • views.py
      • 测试/
        • form_test.py

python django import types isinstance

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

Django 管理员:唯一的电子邮件验证失败了

嗨,这是我的 admin.py 中的一个片段

#admin.py
class UserForm(forms.ModelForm):
    class Meta:
        model = User

    def clean_email(self):
        email = self.cleaned_data['email']
        if User.objects.filter(email=email).exists():
            raise forms.ValidationError("This email already used")
        return email

class UserAdmin(admin.ModelAdmin):
    form = UserForm

admin.site.unregister(User)
admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)

我用它来检查不能使用已使用的电子邮件地址创建新用户。问题是,当我编辑现有用户时,验证检查失败,因为有一个用户具有该邮件地址,但没关系,因为它是我正在编辑的用户。

如何告诉表单验证忽略与当前用户的匹配?

django validation django-forms django-admin

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