Tính năng web của tôi có hai loại người dùng, Khách hàng và Professional. Ngoài ra còn có hai 'mô-đun chính', một cho khách hàng để mua các công cụ và vv (trang web chính), và một cho các chuyên gia để quản lý hoạt động. Đối với auth, tôi muốn có:Nhiều loại người dùng cho Auth ở Django
- Biểu mẫu 'đăng nhập' đơn, phát hiện xem người dùng là khách hàng hay chuyên nghiệp và chuyển tiếp mô-đun phù hợp (trang web chính hoặc trang quản lý).
- Hai biểu mẫu 'đăng ký', một cho khách hàng và một cho các chuyên gia. Có thể, trang web sẽ hỏi người dùng xem cô ấy có muốn đăng ký với tư cách là chuyên gia hay khách hàng không, để kích hoạt luồng đăng ký phù hợp cho từng trường hợp.
- Khách hàng sẽ sử dụng 'trang web chính' và không được phép sử dụng 'trang web quản lý'.
- Các chuyên gia sẽ sử dụng 'trang web quản lý' nhưng không được phép đăng nhập vào trang web chính.
- Cả hai chuyên gia và khách hàng được đăng ký như người dùng, và chia sẻ lĩnh vực phổ biến, chẳng hạn như tên người dùng, điện thoại, email, vv ...
Kể từ Django sẽ không cho phép tôi sử dụng hai mô hình để xác thực. Tôi đã tạo mô hình tùy chỉnh phân lớp AbstractBaseUser và nó phục vụ tôi như một lớp auth cơ sở cho Máy khách và Chuyên gia.
class BaseUser(AbstractBaseUser):
...
class Client(BaseUser):
...
class Professional(BaseUser):
...
Tôi cũng đã thay đổi các thiết lập AUTH_USER_MODEL
tới:
AUTH_USER_MODEL = 'myapp.BaseUser'
Tôi cũng đã bao gồm django-allauth để quản lý đăng ký sử dụng và xác thực. Nhưng bây giờ tôi đang mắc kẹt. Tôi chỉ mới bắt đầu chơi với Django/Python và tôi không chắc chắn làm thế nào để giải quyết điều này.
Dường như không có cách nào được khuyến nghị chính thức để thực hiện việc này (Implementing multiple user types with Django 1.5). Tôi có nên gắn bó với cách tiếp cận phân lớp, hay tôi nên làm mối quan hệ OnetoOne được chỉ ra trong docs?
Khi tôi đã thiết lập đúng mô hình, tôi nên tiếp tục với hai biểu mẫu đăng ký như thế nào? Có thể thực hiện điều này với django-allauth hay tôi cần phải thực hiện thủ công?
Theo như tôi biết, khi người dùng mới được đăng ký, người dùng cơ sở mới được tạo trong bảng Người dùng. Nhưng vì tôi sẽ tạo chuyên môn người dùng (Khách hàng hoặc Chuyên gia), tôi nên chỉ định rằng tôi cũng muốn tạo dữ liệu liên quan đến khách hàng hoặc dữ liệu liên quan đến chuyên nghiệp trong bảng tương ứng như thế nào?
Tôi khá mới để Django, vì vậy bất kỳ lời khuyên sẽ giúp
Cảm ơn, bạn đã cho tôi hướng dẫn tuyệt vời về bố cục dự án. Nhưng, những gì về các mô hình? Bạn có nghĩ rằng việc tạo hai mô hình Chuyên nghiệp và Khách hàng với OneToOnefield liên kết ngược với mô hình Người dùng là ok? Bằng cách đó tôi có thể dễ dàng quản lý cả hai loại người dùng mà tôi đoán ... – jaime
Đó chắc chắn là một lựa chọn, và nó không nhất thiết là một lựa chọn tồi trừ khi bạn muốn mở rộng quy mô. Tùy chọn khác là tạo tất cả các trường trong một mô hình người dùng duy nhất và sử dụng các hàm mô hình để xác định trường nào áp dụng cho các loại người dùng khác nhau. Về cơ bản, thay vì có công cụ DB của bạn xác định các trường nào có thể không null, hoặc giới hạn giá trị, hoặc bất kỳ thứ gì khác cho vấn đề đó, bạn có thể làm cho Django thực thi tính toàn vẹn và linh hoạt hơn một chút trong những mục bạn có thể làm với một mô hình. –
@TitusP vui lòng xem câu hỏi này: http://stackoverflow.com/questions/35252375/trouble-understaing-user-object-in-django?noredirect=1#comment58217925_35252375 – user3497437