分类 Python 下的文章

Python Web之路Django(七): 好用的 ContentType


Django提供的ContentType实在是太方便了

起步

在一些诸如“收藏”的业务场景下,用户能够收藏不同种类的记录,收藏文章,商品,评论等。如果仅用一张表来存储用户的收藏情况,那么模型中需要两个属性来分别表示类型和主键:

class Collect(models.Model):
    """
    用户收藏表
    """
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)

    target_table = models.CharField(verbose_name='表名')
    object_id = models.IntegerField(verbose_name='目标表中的主键')

本文介绍的也是这种实现形式,但如果用 django 提供的 ContentType 会方便很多。


理解 Python 中的 __init_subclass__


在Python的世界里,几乎所有的东西都是可变的。

起步

类方法 __init_subclass__3.6whatsnew3.6) 引入,作用是可以在不使用元类的情况下改变子类的行为。也就是说它是独立于元类编程的,也能达到编辑其他类的一种手段。那么,如何来理解它呢?


Python 中负数取模问题


起步

20190924161639.png

10 % -3,python 和 js 出来的结果不一样。我试着更多语言的结果,包括php和c在内的结果都是 1:

20190924161658.png

Python 得到的结果与其他语言不一样,所以 Python 是错的?然而,这个结果当然是 Python 有意为之,所以我更愿意把它归类到 python 坑里去,Python 对于异号除法的处理和大多流行的语言不一样。


scrapy 动态为每一个请求设置延时技巧


起步

限制访问频率是有效反反爬虫的一个手段。假设每个 n 秒请求一次。恰好我有几个固定的代理 ip。如果在 spider 中设置 DOWNLOAD_TIMEOUT 会使得每个请求之间都有延时,而不是针对代理进行延时,这样就不能很好的利用代理资源。

而我希望的是可以动态的来设置请求延时,目标争取让每个代理间隔 n 秒就发一次请求。