小编And*_*nko的帖子

Django表单在唯一字段上验证失败

我有一个简单的模型定义为:

class Article(models.Model):
    slug  = models.SlugField(max_length=50,  unique=True)
    title = models.CharField(max_length=100, unique=False)
Run Code Online (Sandbox Code Playgroud)

和形式:

class ArticleForm(ModelForm):
    class Meta:
       model = Article
Run Code Online (Sandbox Code Playgroud)

当我尝试更新现有行时,验证失败:

 if request.method == 'POST':
     form = ArticleForm(request.POST)

     if form.is_valid(): # POOF
         form.save()
Run Code Online (Sandbox Code Playgroud)

创建新条目很好,但是,当我尝试更新任何这些字段时,验证不再通过.

"错误"属性什么也没有,但我进入调试器并深入Django内部,我看到了这个:

slu ::"没有此条款的文章已经存在"

因此看起来is_valid()在唯一值检查上失败,但我想要做的就是更新行.

我不能这样做:

form.save(force_update=True)
Run Code Online (Sandbox Code Playgroud)

...因为表单在验证时会失败.

这看起来很简单,但我无法弄清楚.

我正在运行Django 1.0.2

BaseModelForm.validate_unique()在表单初始化时调用了什么.

python django

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

大型团队中的常见库

假设您有五种产品,并且所有产品都使用公司内部库中的一个或多个,由各个开发人员编写.

这听起来很简单,但在实践中,我发现这是非常难以维持.

您如何处理以下情况:

  1. 开发人员无意中引入了一个错误并破坏了生产中的所有内容.

  2. 每个库都必须成熟,这意味着API需要不断发展,那么如果每个开发人员在非常忙于其他项目时需要更新/测试他们的代码,那么如何将更新版本部署到生产中?这是资源和时间问题吗?

  3. 版本控制,部署和使用.您是将它存储在一个全局位置还是强制每个项目使用,例如,svn:externals来"绑定"一个库?

我发现制定一个好的策略非常困难.我自己的宠物理论是这样的:

  1. 每个公共库都必须有一套超级全面的测试,否则它永远不应该是常见的,即使它意味着其他人重复这些努力.重复的未经测试的代码优于常见的未经测试的代码(您只破坏一个项目).

  2. 每个公共库都必须有一个专门的维护者(可以通过一个小团队中非常好的测试套件来抵消).

  3. 每个项目都应该检查已知可以使用它的库的版本.这意味着随着公共代码的更新,开发人员不必为了更新API使用而被撤下.它会是什么.每一段非常重要的代码都会在数月和数年内发展.

谢谢你对此的看法!

unit-testing

15
推荐指数
2
解决办法
1269
查看次数

XMP 图像标记和 Python

如果我要在 Python 中通过 XMP 标记一堆图像,最好的方法是什么?我使用过 Perl 的Image::ExifTool并且非常习惯它的可靠性。我的意思是这个东西从来没有在数以万计的图像上变砖过。

我发现了这一点,得到了欧洲航天局等一些重量级人物的支持,但它显然被标记为不稳定。

现在,假设我对 C++ 很满意,那么在 Python 中直接使用Adobe XMP 工具包有多容易?以前从未这样做过,我不确定我会注册什么。

更新:我尝试了一些库,包括前面提到的工具包,它们仍然非常不成熟并且存在明显的问题。我实际编写了一个基于 Perl 的服务器,它接受 XML 请求来读取和写入元数据,并使用经过实战测试的 Image::EXIF。代码量实际上非常轻,绝对胜过试图让 Python 库工作来折磨自己。服务器解决方案与语言无关,因此它是双重的。

python xmp

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

识别敌对网络爬虫

我想知道是否有任何技术可以识别收集非法使用信息的网络爬虫.简单来说,数据被盗可以创建一个网站的碳副本.

理想情况下,此系统会检测来自未知来源的爬行模式(如果不在列表中使用Google抓取工具等),并向抓取爬虫发送伪造信息.

  • 如果作为一名防御者,我会检测到一个定期击中该网站的未知爬虫,攻击者会将这些间隔随机化.
  • 如果作为防御者,我检测到相同的代理/ IP,攻击者将随机化代理.

这就是我迷路的地方 - 如果攻击者将间隔代理随机化,我怎么能区分代理和机器从同一网络上攻击网站?

我正在考虑使用javascript和cookie支持来检查可疑代理.如果柏忌无法做到一致,那么这就是坏人.

我还可以做些什么?是否有任何算法,甚至是为快速实时分析历史数据而设计的系统?

screen-scraping web-crawler

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