2015-05-05 95 views
0

Django在请求和响应时有中间件来实现某些功能。 Django在写入数据和读取数据时有“数据库中间件”来实现某些功能。Django是否有类似“数据库中间件”的东西?

例如,一些旧的数据库不支持utf8mb4,所以它不能支持所有的表情符号。如果Django具有“数据库中间件”,我将在保存数据时对其进行编码,并在读取数据时进行解码。

+0

我不回答你的问题,但也许我可以用另一种方法来帮助你。即将推出的django [MySQL 5.5的utf8mb4编码]中有一项新功能(https://code.djangoproject.com/ticket/18392)。与此同时,那里的人们正在讨论另一种解决方案。 :) – Yeo

+0

你应该看看[django signals](https://docs.djangoproject.com/en/1.8/topics/signals/)。您可以在任何数据库模型之前和之后调用函数,本质上是一个中间件。 – Jordan

+0

如果你真的想更深入地实现这个解决方案,也许你可以深入了解他们如何实现[DB后端]的源代码(https://github.com/django/django/tree/master/django/db/后端) – Yeo

回答

0

您可以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() 

从文档

实施例还检查pre_savepost_save模型信号。

+0

在从数据库读取''时不覆盖'decode'部分。 – Yeo

+0

@Yoo Django模型描述符是解决这个问题的好选择。 [好解释](http://blog.kevinastone.com/django-model-descriptors.html) – moonstruck

相关问题