基于当前登录用户的Django数据库路由 [英] Django Database routing based on current user logged in

查看:173
本文介绍了基于当前登录用户的Django数据库路由的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

视图类中,您可以调用 self.request.user 并基于此执行操作。就我而言,我希望能够根据登录的当前用户来切换数据库。无论如何,是否需要在<$ c $中注入 self.request 调用c> db_for_read()和 db_for_write()这样的方法?

In a view class, you could call self.request.user and perform actions based on that. In my case, I would like to be able to switch databases depending on the current user logged in. Is there anyway to inject a self.request call into the db_for_read() and db_for_write() methods like in the following?

class DataBaseRouter(object):

    def db_for_read(self, model, **hints):
        user = self.request.user
        if user.id == 1:
            return "master"
        return "default"

    def db_for_write(self, model, **hints):
        user = self.request.user
        if user.id == 1:
            return "master"
        return "default"


推荐答案

您可以使用 RouterMiddlewear 检查是否登录了哪个用户,然后将所有查询重定向到您选择的特定数据库,如果您正在使用基于视图的执行,这将对您有所帮助的查询。

You can use a RouterMiddlewear to check if what user is logged in and then redirect all the queries to a particular database of your choice, this would be help full if you are using view based execution of the queries.

class RouterMiddleware (object):

    def process_view( self, request, view_func, args, kwargs ):
        # Check the user logged in
        user = self.request.user
        # Call your functions to set the database by passing the user.id



    def process_response( self, request, response ):
        # Make the database to default here if you wish to use it no longer

        return response


class DataBaseRouter(object):

    def db_for_read(self, model, user_id=None, **hints):
       if user.id == 1:
            return "master"
        return "default"

    def db_for_write(self, model, user_id=None, **hints):
        if user.id == 1:
            return "master"
        return "default"

我已为其修改的链接您的要求。

Here is the link that I have modified for your requirement.

确保将 RouterMiddleware 添加到 MIDDLEWARE_CLASSES

这篇关于基于当前登录用户的Django数据库路由的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆