小编Lud*_*mer的帖子

为Django应用程序编写好的测试

我从来没有在我的生活中写过任何测试,但我想开始为我的Django项目编写测试.我已经阅读了一些关于测试的文章,并决定尝试为一个非常简单的Django应用程序或者开始编写一些测试.

该应用程序有两个视图(列表视图和详细信息视图)和一个包含四个字段的模型:

class News(models.Model):
    title = models.CharField(max_length=250)
    content = models.TextField()
    pub_date = models.DateTimeField(default=datetime.datetime.now)
    slug = models.SlugField(unique=True)
Run Code Online (Sandbox Code Playgroud)

我想向您展示我的tests.py文件并询问:

是否有意义?

我甚至在测试正确的东西吗?

是否有我不遵循的最佳实践,你可以指点我吗?

我的tests.py(它包含11个测试):

# -*- coding: utf-8 -*-
from django.test import TestCase
from django.test.client import Client
from django.core.urlresolvers import reverse
import datetime
from someproject.myapp.models import News

class viewTest(TestCase):
    def setUp(self):
        self.test_title = u'Test title: b?rek??'
        self.test_content = u'This is a content 156'
        self.test_slug = u'test-title-bareksc'
        self.test_pub_date = datetime.datetime.today()

        self.test_item = News.objects.create(
            title=self.test_title,
            content=self.test_content,
            slug=self.test_slug,
            pub_date=self.test_pub_date,
        )

        client = Client()
        self.response_detail = client.get(self.test_item.get_absolute_url()) …
Run Code Online (Sandbox Code Playgroud)

python django unit-testing django-testing

28
推荐指数
2
解决办法
4259
查看次数

Django内存使用率随着每个请求而上升

我将我的第一个Django项目从DjangoEurope转移到Webfaction,这开始出现一个看起来像内存泄漏的问题.随着每个请求服务器进程的内存使用量增加约500kb.它永远不会失败.这种情况一直持续到Webfaction因使用太多内存而导致死亡.

当我在浏览器中刷新Django的管理界面时,我可以清楚地看到这一点(虽然每个页面都会发生这种情况,不仅仅是管理界面 - 我虽然管理界面会是一个不错的测试用例,因为那里没有我的代码) .随着每个浏览器重新加载,内存使用量增加几百千字节.

我使用Webfaction建议的命令测试内存:

ps -u publica -o rss,etime,pid,command
Run Code Online (Sandbox Code Playgroud)

更多关于我的设置:

  • Django 1.1(稳定)
  • 使用Apache和mod_wsgi的默认Webfaction Django设置
  • DEBUG 调成 False
  • 来自Webfaction的MySQLdb 1.2.2,但在听到它有一些问题之后我尝试了1.2.3c版本.没有帮助.

编辑:我创建了一个空的Django项目 - 默认的Django配置django.contrib.admin和新的空数据库(同时使用mysql和postgresql).我开始在浏览器中重新加载Django管理员并观察内存使用情况.起初我看到了问题 - 每次重新加载后内存使用量都会增加.但随后它稳定下来并停止增长.这与我的原始项目在Django Europe上的表现一致.不幸的是,在Webfaction上它似乎永远不会稳定(或者至少不在我帐户可用的内存限制内).有什么建议?

python django memory-leaks mod-wsgi

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

为超级用户以外的用户排除Django admin中的字段

我有一个简单的MyUserPermissionsMixin.user.is_superuser等于True只能由超级用户.我希望能够在我的网站上做类似的事情admin.py:

    if request.user.is_superuser:
        fieldsets = (
            (None, {'fields': ('email', 'password')}),
            ('Permissions', {'fields': ('is_admin','is_staff')}),
            ('Place', {'fields': ('place',)}),
            ('Important dates', {'fields': ('last_login',)}),
        )
    else:
        fieldsets = (
            (None, {'fields': ('email', 'password')}),
            #('Permissions', {'fields': ('is_admin','is_staff')}),
            ('Place', {'fields': ('place',)}),
            ('Important dates', {'fields': ('last_login',)}),
        )
Run Code Online (Sandbox Code Playgroud)

基本上我希望我的用户能够创建其他用户,但不要给他们管理员或东西权限.只有超级用户才能做到这一点.

python django

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

在Odoo ORM中处理SQL约束异常

我的模型中定义了一个UNIQUE约束:

class FooBar(models.Model):
    _name = 'my.foobar'

    # ...

    _sql_constraints = [
        ('foo_bar_uniq', 'unique("foo", "bar")', 'You could not step twice into the same foobar!')
    ]
Run Code Online (Sandbox Code Playgroud)

以及一个用于创建新对象的代码的控制器:

class FooBarController(http.Controller):
    @http.route('/foobar/create/', auth='public', website=True)
    def create(self, foo, bar):
        http.request.env['my.foobar'].create({
            'foo': foo,
            'bar': bar,
        })
        return http.request.render('my.thank_you_page')
Run Code Online (Sandbox Code Playgroud)

如果违反了UNIQUE约束,我会得到一个IntegrityError例外.我想抓住它并向用户显示不同的消息:

from psycopg2 import IntegrityError

class FooBarController(http.Controller):
    @http.route('/foobar/create/', auth='public', website=True)
    def create(self, foo, bar):
        try:
            http.request.env['my.foobar'].create({
                'foo': foo,
                'bar': bar,
            })
            return http.request.render('my.thank_you_page')
        except IntegrityError:
            return http.request.render('my.error_page')
Run Code Online (Sandbox Code Playgroud)

这有点......有点儿.在IntegrityError成功地抓住了,但随后的所有数据库操作(其中,因为据我所知,通过自动的触发website模块)结束InternalError:

InternalError: current …
Run Code Online (Sandbox Code Playgroud)

python orm exception openerp odoo

8
推荐指数
3
解决办法
2569
查看次数

将水平滚动与WebView结合使用时的滚动优先级

我有一个WebView水平滚动里面的垂直滚动PageView。像这样:

PageView.builder(
  itemCount: 5,
  itemBuilder: (context, index) {
    return WebView(
      initialUrl: 'https://flutter.dev/docs',
      gestureRecognizers: [
        Factory(() => VerticalDragGestureRecognizer()),
      ].toSet(),
    );
  },
);
Run Code Online (Sandbox Code Playgroud)

在Flutter的先前稳定版本(1.5.4)中,此操作按预期工作-垂直滚动将在WebView中移动内容,水平滚动将在PageView中移动。

升级到Flutter后,此操作中断了v1.7.8+hotfix.3。现在,即使手势几乎完全是垂直的,水平滚动似乎总是可以取胜的。如果页面完全垂直滚动,则仅在手势停止之后(即,当我在手势之后停止触摸屏幕时)-在手势发生时不会进行垂直滚动。

添加和删除VerticalDragGestureRecognizergestureRecognizers没有任何效果现在-无论哪种方式,程序,工作起来就像识别器不在名单上(尽管这并不是说gestureRecognizers完全忽略,因为加入EagerGestureRecognizer确实有效果)。

这是手势竞技场的调试输出(请记住,我试图将笔势保持尽可能垂直,但是即使HorizontalDragGestureRecognizer我也垂直移动了手势,即使手指稍微向两侧移动也足以赢得胜利。全部时间):

I/flutter (30125): Gesture arena 14   ? ? Opening new gesture arena.
I/flutter (30125): Gesture arena 14   ? Adding: Instance of '_CombiningGestureArenaMember'
I/flutter (30125): Gesture arena 14   ? Adding: LongPressGestureRecognizer#9cad1(debugOwner: GestureDetector, state: ready)
I/flutter (30125): Gesture arena 14   ? Adding: …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-plugin

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

如何隐藏字段取决于条件odoo?

attrs="{'invisible': [('rule_id.type_test', '!=', 'A')]}" 在上面的代码不起作用,我怎么能解决这个问题?

class test_list(models.Model):
    _name = 'test.list'

    type_test = fields.Selection([('A', 'aaaa'),('B','bbbbb')], default='A', string="Type", required=True)  
    rule_list = fields.One2many('test.rule', 'rule_id')
Run Code Online (Sandbox Code Playgroud)
class test_rule(models.Model):
    _name = 'test.rule'

    rule_id = fields.Many2one('test.list', required=True)

    ul = fields.Many2one('product.ul', string='Package Logistic Unit'
Run Code Online (Sandbox Code Playgroud)
<record model="ir.ui.view" id="rules_form_view">
            <field name="name">test.rules.form.view</field>
            <field name="model">test.rule</field>
            <field name="arch" type="xml">
                <form string="Test Rules">
                   <field name="ul" attrs="{'invisible': [('rule_id.type_test', '!=', 'A')]}"/> 
                </form>
            </field>
</record>
Run Code Online (Sandbox Code Playgroud)

openerp openerp-8 odoo

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

在settins.py中注册的Django应用程序的自动发现小部件

标题可能有点令人困惑,但我不知道怎么称呼它.

我想创建一个Django项目,其中包含大量应用程序,您可以使用INSTALLED_APPSsettings.py中的选项任意打开或关闭(您显然还需要编辑urls.py并运行syncdb).打开应用后应该能够自动:

  1. 在网站范围的搜索中注册它的内容.幸运的是django-haystack有这个内置功能,所以这不是问题.

  2. 注册cron工作.django-cron正是如此.不是问题.

  3. 注册应显示在主页上的小部件.主页应包括具有不同应用程序的小部件的框列表.

    我考虑过包含标签,因为您可以将它们放在页面上的任何位置,它们可以控制内容和演示文稿.问题是我不知道如何自动获取我的应用程序提供的包含标记列表,并在主页上逐个显示它们.我需要一种方法以某种方式注册它们,然后显示所有注册的标签.

django django-templates

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

在odoo中添加了Many2many字段后,"关系已经存在"

我已经定义了以下两个odoo ORM模型:

class Weekday(models.Model):
    _name = 'ludwik.offers.weekday'
    name = fields.Char()

class Duration(models.Model):
    _name = 'ludwik.offers.duration'
    weekday = fields.Many2many('ludwik.offers.weekday')
Run Code Online (Sandbox Code Playgroud)

当我尝试启动odoo时,我收到以下消息:

ProgrammingError: relation "ludwik_offers_duration_ludwik_offers_weekday_rel_ludwik_offers_" already exists
Run Code Online (Sandbox Code Playgroud)

此外,当我更改_name模型中的属性时,问题仍然存在(当然错误消息中的关系名称会更改以反映重命名),因此它不仅仅与数据库中已存在的某些旧关系发生冲突.

python postgresql relationship openerp odoo

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

在odoo中发送特定组的通知

我想为manfacture组中的每个人发送通知,所以我尝试了这个代码,但它不起作用

manf_categ_ids=self.pool.get('ir.module.category').search(cr,uid,[('name','=','Manufacturing')],context=context)[0]
    users=self.pool.get('res.groups').browse(cr, uid, manf_categ_ids , context=context).users
    for user in users:
        recipient_partners = []
        recipient_partners.append(
            (4, user.partner_id.id)
        )       
    #user_ids=self.pool.get('res.users').search(cr,uid,[('groups_id','=',manf_categ_ids)],context=context)
    post_vars = {'subject': "notification about order",
         'body': "Yes inform me as i belong to manfacture group",
         'partner_ids': recipient_partners,} # Where "4" adds the ID to the list 
                                   # of followers and "3" is the partner ID 
    thread_pool = self.pool.get('mail.thread')
    thread_pool.message_post(
            cr, uid, False,
            type="notification",
            subtype="mt_comment",
            context=context,
            **post_vars)
Run Code Online (Sandbox Code Playgroud)

2个用户属于制造组的问题,但用户列表只包含1个元素,当我使用该用户登录时,此代码不发送任何通知

python odoo

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