سؤال

وأود أن إنشاء مجموعة فرعية من المستخدمين التي لم يكن لديك لتسجيل الدخول ... في الأساس وسيلة لإضافة حقل مصور على الصور دون الحاجة لحساب كامل في مهب المرتبطة مع هذا الشخص (لأنه في كثير من الحالات، وأنها سوف أبدا الدخول فعلا إلى الموقع). والتحذير هو أنني أود أيضا أن تكون قادرة على تمكين حساب لهم في وقت لاحق.

وهكذا، أعتقد يصبح السؤال ما هي أفضل طريقة لاقامة "الشعب" الجدول الذي يربط إلى طاولة العضو دون أن تمتد في الواقع الجدول العضو مع التشكيل الجانبي للمستخدم.

هل كانت مفيدة؟

المحلول

تعريف المستخدم (على النحو الذي عاد django.contrib.auth.models.User.get_profile) لا تمديد الجدول المستخدم - نموذج الذي تحدده كنموذج الشخصي مع إعداد AUTH_PROFILE_MODULE هو مجرد نموذج الذي لديه ForeignKey إلى User. get_profile والإعداد هي حقا مجرد API الراحة للوصول إلى مثيل لنموذج معين، والتي لديها ForeignKey إلى مثيل User محددة.

وعلى هذا النحو، خيار واحد هو خلق نموذج الشخصية فيها ForeignKey إلى User يمكن null وربط نموذج Photo الخاص بك مع هذا النموذج الشخصي بدلا من طراز User. هذا من شأنه أن يسمح لك لخلق صورة لمستخدم غير موجودة وإرفاق العضو المسجل إلى الوضع في وقت لاحق.

نصائح أخرى

والمستخدمين التي لا يمكن الدخول؟ فقط أعطاهم كلمة مرور عشوائية تماما.

import random
user.set_password( str(random.random()) )

وانهم سوف لن تكون قادرة على تسجيل الدخول.

والعرض الخاص المصادقة روتين بك، ثم يمكنك التحقق (أو لا تحقق) أي شيء تريد. ونحن نفعل ذلك حتى إذا فشلوا على اسم المستخدم العادي، يمكننا أيضا أن تسمح لهم بالدخول على البريد الإلكتروني / كلمة المرور (على الرغم من أن هذا ليس ما أنا يظهر أدناه).

وفي settings.py:

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'userprofile.my_authenticate.MyLoginBackend', # if they fail the normal test
 )

وفي التشكيل الجانبي للمستخدم / my_authenticate.py:

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User

class MyLoginBackend(ModelBackend):
    """Return User record if username + (some test) is valid.
       Return None if no match.
    """

    def authenticate(self, username=None, password=None, request=None):
        try:
            user = User.objects.get(username=username)
            # plus any other test of User/UserProfile, etc.
            return user # indicates success
        except User.DoesNotExist:
            return None
    # authenticate
# class MyLoginBackend

ومن وثائق حول جانغو المصادقة ، إذا كنت ترغب في استخدام نموذج المستخدم، انها إلزامية أن يكون اسم المستخدم وكلمة المرور، لا توجد "حسابات مجهولة". وأنا أعتقد أن إنشاء حسابات مع كلمة المرور الافتراضية ومن ثم إعطاء الفرصة للناس لتمكين حساب "الحقيقي" (عن طريق وضع كلمة مرور أنفسهم).

لاقامة "الشعب" الجدول الذي يربط إلى طاولة العضو عليك أن استخدام حقل ForeignKey (وهذا في الواقع في أوصى طريقة إضافة معلومات إضافية إلى النموذج المستخدم، وليس الميراث)

مع ForeignKey الحقل ربط العضو قد لا تعمل كما تريد لأنك تحتاج الوصول المجهول. لست متأكدا إذا كان هذا هو الذهاب إلى العمل، ولكنك قد تحاول ماذا يحدث إذا كنت اتركها لديها ForeignKey إلى <لأ href = "http://docs.djangoproject.com/en/dev/topics/auth/#anonymous -users "يختلط =" نوفولو noreferrer "> AnonymousUser (والذي هو دائما لا أحد! معرف) بدلا من ذلك.

إذا كنت تحاول ذلك، نشر النتائج الخاصة بك هنا، وسأكون غريبة.

ووdjango.contrib.auth.models.User موجود فقط لغرض استخدام الخلفية المصادقة الافتراضية (بناء قاعدة بيانات). إذا كنت أكتب الخلفية الخاصة بك، يمكنك إجراء بعض الحسابات passwordless، مع الحفاظ على عادي حسابات مع كلمات السر. وثائق جانغو لديها على هذا .

وupvote آخر ل في الإجابة : التعامل مع ذلك من خلال UserProfile. جيمس بينيت لها <لأ href = "http://www.b-list.org/weblog/ 2006 / يونيو / 06 / جانغو، نصائح إطالة المستخدم طراز / "يختلط =" نوفولو noreferrer "> عظيم المقالة حول توسيع django.contrib.auth.models.User. يمشي من خلال أساليب الزوجين، ويوضح لهم إيجابيات / سلبيات والأراضي على الطريق UserProfile كما مثالية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top