Django多用户SaaS

2 投票
1 回答
1900 浏览
提问于 2025-04-17 09:35

我正在创建一个小型的SaaS应用,主要是为了学习... 我知道最好的做法是为每个用户创建一个单独的数据库结构(schema)... 但是我的这个小应用并不需要这么复杂的结构,这样反而会让事情变得复杂(以后如果要修改结构的话)... 所以我打算给所有用户使用同一个数据库结构,只是在每条记录上加上用户的ID,然后在用户登录时只显示他们自己的记录。

请问有没有办法在用户登录时通过中间件“添加”用户的ID?还是说我需要调整所有的查询(根据用户的ID进行筛选)?我已经把用户的ID存储在他们的记录里了... 所以我只需要在查询的时候用到这个ID。

谢谢!

1 个回答

2

我不知道有什么方法可以根据请求的用户自动过滤查询集。这是因为ORM(对象关系映射)和django.contrib.auth并没有直接关联。

我尝试了两种SaaS设计:

  1. 一个数据库供所有网站使用,然后手动过滤所有查询集。当然,这样做会导致django.contrib.admin无法直接使用。如果想要使用django.contrib.admin,可能需要非常复杂的设置,比如使用django-authority,或者其他一些针对每个对象权限的包(其他django权限包这是谷歌缓存的版本,因为djangopackages.com现在无法访问)。

  2. 每个网站一个数据库,这样做更简单,代码也更干净,而且django.contrib.admin可以直接使用。如果你安装一个django管理主题,这会非常酷。此外,我还启用了django.contrib.admindocdjango-dbtemplates

(显然在你的情况下,一个网站=一个用户,但概念是一样的)

我更喜欢第二种实现方式,因为显然开发工作量要少得多,虽然需要稍微多一点的系统管理。

撰写回答