小编tho*_*mad的帖子

如何为未来的变化准备一个django项目

当我在我的第一个django支持的网站上工作时,我不断学习新的东西,并在我去的时候对我的应用程序进行各种更改和添加.我尝试遵循DRY和pythonic原则,并且在编码时要聪明,但最终我必须把网站带到现场,并且确定在我做完之后不久,新的和退出的东西将会出现在管道上,我将要实现它.

为未来做准备:

考虑到这一点,做乡亲有关于我如何准备我的代码的任何建议,现在要为未来做好准备,尽可能为这些不可预见的当前/未知升级/添加到我的代码库?

后见之明是20/20:

你希望你在一开始就做了什么,这会让你的网站在你的网站启动和运行时变得更轻松?

我学到的小事(例子):

  • 使用UTC作为默认时区(并使用datetime.datetime.utcnow())
  • 使用South来帮助未来的数据库更改(尚未完成,但看起来很明智)
  • 我的模板中没有硬代码链接(使用get_absolute_url()和反向查找)
  • 创建一个单独的tools应用程序,以包含我可能希望在将来的项目中使用的小型可重用模板标签和实用程序功能(以后不需要将它们分离)

这些是小技巧,有些直接来自django-docs,但我认为它们有所帮助.

你呢?对于为未来做好准备的新应用或项目,您的最佳做法是什么?

python database django

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

使用Django的m2m_changed来修改pre_add的保存内容

我对Django的信号不是很熟悉,可以使用一些帮助.

如何在保存实例之前修改pk_set?我是否必须向信号呼叫者返回一些东西(比如kwargs)?或者我保存instance自己?

作为一个简单的例子:我希望确保在pk=1保存时我的所有视频都包含类别.我该怎么做m2m_changed

class Video(models.Model):
    category = models.ManyToManyField('Category')

def video_category_changed(sender, **kwargs):
    action = kwargs.pop('action', None)
    pk_set = kwargs.pop('pk_set', None)
    instance = kwargs.pop('instance', None)

    if action == "pre_add":
        if 1 not in pk_set:
            pk_set.update( [ 1 ] )  # adding this to the set
            # do something else?
            # profit?

m2m_changed.connect( video_category_changed, sender=Video.category.through )
Run Code Online (Sandbox Code Playgroud)

python django django-signals django-orm m2m

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

VIM:如何将搜索/替换命令添加到vimrc并映射到快捷方式

我有两个搜索/替换命令,我发现自己经常在vim中运行以清理HTML代码,因此我可以在线复制/粘贴它.命令是:

:%s!<!\&lt;!g
:%s!>!\&gt;!g
Run Code Online (Sandbox Code Playgroud)

我想要一种方法,我可以将这两个命令映射到一起运行...我做了一些搜索如何使用:mapvimrc中的命令,但是,我无法看到如何将两行合并为一个命令,即使用单击键(或单个笔画序列)运行.

谢谢!

vim search replace map

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

创建一个UNION查询,用于标识唯一数据来自哪个表

我有两个数据表.两个表都有一CUSTOMER_ID列(数字).我试图得到所有唯一值的列表,CUSTOMER_ID 知道CUSTOMER_ID两个表中是否存在或只存在一个(以及哪一个).

我可以很容易地得到一个独特的列表CUSTOMER_ID:

SELECT tblOne.CUSTOMER_ID
FROM tblOne.CUSTOMER_ID
UNION
SELECT tblTwo.CUSTOMER_ID
FROM tblTwo.CUSTOMER_ID
Run Code Online (Sandbox Code Playgroud)

我不能只为SELECTstatemtn 添加一个标识符列(如:),SELECT tblOne.CUSTOMER_ID, "Table1" AS DataSource因为那时记录不是唯一的,它将获得两组数据.

我觉得我需要在此查询中的其他位置添加它,但我不确定如何.

为清晰起见编辑:

对于联合查询输出,我需要一个额外的列,可以告诉我我看到的唯一值是否存在于:(1)两个表,(2)表一或(3)表二.

sql union ms-access unique

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

使用py.test,LiveServerTestCase后不会重置数据库

我有许多Django测试,通常使用py.test运行它们.我最近在一个新文件中添加了一个新的测试用例test_selenium.py.这个测试用例使用了LiveServerTestCaseStaticLiveServerTestCase类(这是我的第一个,通常我只是使用TestCase).

在这个新文件中添加这一批新测试导致后续测试在py.test中失败(在它们全部通过之前).LiveServerTestCase在py.test 之后,数据库似乎没有被"重置" .我可以告诉我,因为我的模型的pk值增加了.

当我使用Django测试运行器运行这些测试时,它们都会通过,并在后续测试pk重置 ; 在py.test测试运行器中pk,在LiveServerTestCase运行后的后续测试中会增加.因此,如果我在我的测试中硬编码创建一个对象并根据pk我期望它失败来检索它,因为Django和py.test之间的数据库是不同的.

任何想法为什么会这样,以及如何解决它?

导致数据库行为的新测试测试:

from django.contrib.staticfiles.testing import StaticLiveServerTestCase

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


class UpdateCountSelenium(StaticLiveServerTestCase):

    def setUp(self):
        self.selenium = webdriver.Firefox()
        self.delay = 3

    def tearDown(self):
        self.selenium.quit()

    def test_ajax_hit(self):
        self.selenium.get("%s%s" % (self.live_server_url, '/1/'))
        # waits for javascript to load and tests the …
Run Code Online (Sandbox Code Playgroud)

python django unit-testing django-testing pytest

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

找到不以"<"开头的行,执行操作

我使用的是vim并且有一个大文本文件,其中包含一些在throoghout中抛出的html.我正在尝试为网络准备它,并需要将<p></p>标签添加到尚未格式化的行.这是我的一个例子:

Paragraph text one one line [... more ... ]
Other paragraph text on the next line [... more ... ]  
<h1>html element thrown in on its own line</h1>
More paragraph text [... more ... ]  
<!-- some other element (always own line) -->
There is still more text!
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来搜索<字符开头的行,对于这些行,添加开始和结束<p></p>标记...以便之后,我的文件类似于:

<p>Paragraph text one one line [... more ... ] </p>
<p>Other paragraph text on the next line [... more ... …
Run Code Online (Sandbox Code Playgroud)

regex vim sed

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

使用jQuery使用next()x次

使用next()(每次应用相同的函数)迭代x次的简单方法是什么?

我在Sharepoint工作,对HTML的控制有限; 我所能做的就是找到了其ID的元素,追查最近<td>,hide()它,然后继续前进到下一个(我不希望所有<td>的,只是约7或8连胜).

下面的代码有效,但不是很漂亮.

$("#my-easily-identifiable-id").closest("td").hide();
$("#my-easily-identifiable-id").closest("td").next().hide();
$("#my-easily-identifiable-id").closest("td").next().next().hide();
$("#my-easily-identifiable-id").closest("td").next().next().next().hide();
[ ... etc ... ]
Run Code Online (Sandbox Code Playgroud)

有什么更好的方法呢?

谢谢

PS:添加小提琴(天才)

javascript jquery iterator next

6
推荐指数
2
解决办法
2955
查看次数

使用 `joins()` 首先是一个 INNER JOIN,然后是下一个表的 LEFT JOIN

我试图避免joins在 Rails 中插入字符串,因为我注意到将查询器链接在一起时灵活性会降低。也就是说,我觉得它joins(:table1)joins('inner join table1 on table1.id = this_table.table1_id').

我想完成的是:

FROM table1
INNER JOIN table2 on table2.id = table1.table2_id
LEFT JOIN table3 on table3.id = table2.table3_id
Run Code Online (Sandbox Code Playgroud)

内连接所有

但是,我不知道如何使用 Rails 的说法来做到这一点:

Table1.joins(table2: :table3)
Run Code Online (Sandbox Code Playgroud)

结果在最终表上的 INNER 连接。

FROM table1
INNER JOIN table2 on table2.id = table1.table2_id
INNER JOIN table3 on table3.id = table2.table3_id
Run Code Online (Sandbox Code Playgroud)

左加入所有

如果我用left_outer_joins...

Table1.left_joins(table2: :table3)
Run Code Online (Sandbox Code Playgroud)

结果在两个表上的 LEFT 连接(不需要)。

FROM table1
LEFT JOIN table2 on table2.id = table1.table2_id
LEFT JOIN table3 on table3.id …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-5

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

最好将slug保存到DB还是动态生成?

我正在开发一个django项目,并希望在url的末尾包含一个slug,就像在stackoverflow.com上所做的那样:http://example.com/object/1/my-slug-generated-from-我的标题

对象ID将用于查找项目,而不是slug - 而且,就像stackoverflow.com一样,当获取链接时(仅显示它),slug根本不重要.

问题:动态生成slug是否存在下行(或上行),而不是将其保存为实际的数据库字段?

例如(不是真正的代码):

class Widget(models.Model):
    title = models.CharField()

    def _slug(self):
      return slugify(self.title)
    slug = property(_slug)
Run Code Online (Sandbox Code Playgroud)

而不是使用类似AutoSlugField的东西(例如)?

由于我的计划是让它与标题匹配,我不知道在数据库中是否有重复字段是否有意义.

谢谢!

django slug

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

Yard doc 和常量、实例和类方法的动态分配

我有一个模块来帮助定义某些方法、常量和类方法。它正在动态地创建它们。我需要帮助了解如何使用 Yard Doc 的@macro功能来对齐文档并从包含的模块内部设置实例、类和常量文档。

在它的基本情况下,它看起来像这样:

module Constantizer
  extend ActiveSupport::Concern

  # @!macro [attach] define_constant
  #   @method $1?
  #   Is this a $1?
  #   @return [Boolean]

  module ClassMethods

    def define_constant(label, value, description)
      const_set(label.to_s.upcase, value)
      define_method("#{label}?") { self.id == value }
      define_singleton_method(label) { find(value) }
    end

  end
end

class MyRecord < ActiveRecord::Base
  include Constantizer 
  # @!parse include Constantizer

  attr_accessor :label, :id

  define_constant :one, 1, 'the number one'
  define_constant :two, 2, 'the number two'
  # ... etc ...
end
Run Code Online (Sandbox Code Playgroud)

这将define_constant创建一个实例方法、一个常量和一个类方法。 …

ruby ruby-on-rails yard

5
推荐指数
0
解决办法
228
查看次数