2012-01-05 2 views
2

나는 학습 목적으로 작은 saas를 만들고 있습니다 ... 나는 최선의 방법은 각 사용자에 대해 별도의 스키마를 갖는 것입니다.하지만 내 SaaS는 작은 응용 프로그램이며 실제로는 별도의 스키마가 필요없고, 스키마 (나중에 스키마 변경)가 복잡해질 것입니다. 모든 사용자에게 동일한 스키마를 사용하고 각 사용자의 ID를 항목에 추가 한 다음 사용자의 ID 만 표시합니다. 로그인시 항목.Django 다중 사용자 SaaS

미들웨어를 통해 로그인 할 때 사용자 ID를 "추가"할 수있는 방법이 있습니까? 또는 모든 검색어를 조정해야합니까 (사용자의 ID로 필터링)? 나는 이미 자신의 항목에 사용자의 ID를 저장하고 있습니다 ... 그래서 select에 대해서만 필요합니다.

감사합니다.

+1

request.user를 기반으로하는 쿼리 세트를 자동으로 필터링하는 방법을 모르겠습니다. 이것은 ORM이 django.contrib.auth와 결합되어 있지 않기 때문입니다. 필자는 모든 쿼리 세트 (django.contrib.admin 없음)에서 모두 및 수동 필터링을위한 하나의 데이터베이스와 django.contrib.admin (admindoc 및 django- dbtemplates). 시스템 관리와 ​​관련하여 더 많은 작업이 있지만 나중에는 더 선호합니다. – jpic

+0

@jpic : 답변을 답변으로 게시하여 회상하고 의견을 말하십시오. –

답변

2

request.user를 기반으로하는 쿼리 세트를 자동으로 필터링하는 방법을 모르겠습니다. 이것은 ORM이 django.contrib.auth와 결합되어 있지 않기 때문입니다. 모든 검색어 세트에

  1. 한 모든 사이트에 대한 데이터베이스 및 수동 필터링 :

    나는 두 SaaS는 디자인을 시도했다. 물론 이것은 django.contrib.admin을 즉시 사용할 수 없도록 만들었습니다. django.contrib.admin을 django-authority 또는 심지어 other django per-object permission packages (google cached version because djangopackages.com is down ATM)의 매우 엄격한 설정으로 활성화하는 것이 가능할 수도 있습니다. 사이트 당

  2. 1 데이터베이스는, 그, 그냥 쉽게 코드 청소기를 유지하고, 당신이 django admin theme를 설치하면 정말 멋진 될 수있는 상자에서 django.contrib.admin 수 있습니다. 또한 django.contrib.admindocdjango-dbtemplates을 사용하도록 설정했습니다.

은 분명히 약간에 의해 보상 훨씬 덜 개발 작업, 때문에

내가 두 번째 구현을 선호 (분명히 귀하의 경우, 1 개 사이트 = 1 사용자 있지만 개념은 동일) 시스템 관리.

+0

옵션 # 2에 대한 권장 사항이 있습니까? 하위 도메인이 필요하지 않습니다 ... 작은 학습 프로젝트입니다 ... 그래서 사용자 로그인시 스키마를 변경해야합니다 ... – Mission

+0

옵션 2에 대한 간단한 대답 : 루트 액세스 권한이있는 서버 uWSGI + nginx를 사용하는 것이 좋습니다. 꽤 우아한 방식으로 다중 사이트 django 응용 프로그램을 지원하기 때문에 배포를 위해 : N 클라이언트에 대해 한 번만 구성하면됩니다. 어떤 데이터베이스 서버 또는 리눅스 배포판을 선택하든 상관 없습니다. 언제나 데이터베이스 생성을 자동화 할 수 있습니다. 원한다면 우리가 가지고있는 앱과 설정을 소스를 열어서 나중에 또는 내일 나중에 재현 할 수 있습니다. 내가 만난 유일한 "이슈"는 다중 사이트 백그라운드 작업 관리자 (즉, ztaskd)를 아직 찾지 못했지만 대부분의 경우에는 필요하지 않습니다. – jpic

+0

모델의 관리자를 필터를 지정하는 것으로 대체하여 request.user를 기반으로 모든 쿼리 집합을 필터링하는 것과 같은 작업을 수행 할 수 있습니다. 따라서, Thingy.objects.all()은 현재 요청 사용자에게 연결합니다. 또는'Thingy.objects_for_user.all()'등을 사용할 수있는 여분의 관리자를 지정할 수 있습니다. –