Django在请求和响应时有中间件来实现某些功能。 Django在写入数据和读取数据时有“数据库中间件”来实现某些功能。Django是否有类似“数据库中间件”的东西?
例如,一些旧的数据库不支持utf8mb4,所以它不能支持所有的表情符号。如果Django具有“数据库中间件”,我将在保存数据时对其进行编码,并在读取数据时进行解码。
Django在请求和响应时有中间件来实现某些功能。 Django在写入数据和读取数据时有“数据库中间件”来实现某些功能。Django是否有类似“数据库中间件”的东西?
例如,一些旧的数据库不支持utf8mb4,所以它不能支持所有的表情符号。如果Django具有“数据库中间件”,我将在保存数据时对其进行编码,并在读取数据时进行解码。
您可以overwrite model methods专门保存的方法来实现这一点。从django.db进口机型
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def save(self, *args, **kwargs):
# your intended modification
do_something()
super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
do_something_else()
从文档
在从数据库读取''时不覆盖'decode'部分。 – Yeo
@Yoo Django模型描述符是解决这个问题的好选择。 [好解释](http://blog.kevinastone.com/django-model-descriptors.html) – moonstruck
我不回答你的问题,但也许我可以用另一种方法来帮助你。即将推出的django [MySQL 5.5的utf8mb4编码]中有一项新功能(https://code.djangoproject.com/ticket/18392)。与此同时,那里的人们正在讨论另一种解决方案。 :) – Yeo
你应该看看[django signals](https://docs.djangoproject.com/en/1.8/topics/signals/)。您可以在任何数据库模型之前和之后调用函数,本质上是一个中间件。 – Jordan
如果你真的想更深入地实现这个解决方案,也许你可以深入了解他们如何实现[DB后端]的源代码(https://github.com/django/django/tree/master/django/db/后端) – Yeo