Mixin 用于在基于 Django class 的视图中更改 get 方法的行为

Mixin for changing the behaviour of a get method in Django class based view

我正在尝试编写一个 mixin,用于根据用户配置文件模型中设置的语言设置翻译语言。 当收到请求时,mixin 应该将语言设置为用户语言,从添加 mixin 的视图中获取响应,然后将语言设置回之前的状态。我写了下面的 mixin,它被调用了,但是它的 get 方法没有被调用。我究竟做错了什么?

class SetUserLanguageMixin(object):
    def get(self, request):
        current_language = translation.get_language()
        try:
            translation.activate(request.user.profile.language)
            response = super(SetUserLanguageMixin, self).get(request)
        finally:
            translation.activate(current_language)

        return response

class SomeView(LoggingMixin, APIView, SetUserLanguageMixin):
    def get(self, request):
        ... 
        return Response(data, status=status.HTTP_200_OK)

如果您的 SomeView 覆盖了 get(),那么您的 mixin 的 get() 方法将不会被调用,除非您调用 super()。您可以尝试在混入中覆盖 dispatch

请注意,如果覆盖的 get/dispatch 方法接受 args 和 kwargs,您的视图将更加健壮:

def dispatch(self, request, *args, **kwargs):
    ...
    response = super(SetUserLanguageMixin, self).dispatch(request, *args, **kwargs)
    ...