سؤال

أرغب في موافقة المستخدم على شروط الخدمة ودعم رسائل البريد الإلكتروني الفريدة أيضًا.يحتوي Django-registration على نموذجين مختلفين للتسجيل من الفئات الفرعية يقومان بذلك: RegistrationFormTermsOfService و RegistrationFormUniqueEmail.

هل يجب علي إنشاء علامة فرعية خاصة بي لنموذج التسجيل ثم توفير هاتين الميزتين؟إذا كان الأمر كذلك، كيف سيتم تحقيق ذلك؟هل سيكون نموذج التسجيل موجودًا داخل Forms.py الخاص بتطبيقي أو في مكان آخر؟

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

المحلول

نظرة سريعة على مصدر لتظهر الفئتين:

class RegistrationFormTermsOfService(RegistrationForm):
    """
    Subclass of ``RegistrationForm`` which adds a required checkbox
    for agreeing to a site's Terms of Service.

    """
    tos = forms.BooleanField(widget=forms.CheckboxInput,
                             label=_(u'I have read and agree to the Terms of Service'),
                             error_messages={'required': _("You must agree to the terms to register")})


class RegistrationFormUniqueEmail(RegistrationForm):
    """
    Subclass of ``RegistrationForm`` which enforces uniqueness of
    email addresses.

    """
    def clean_email(self):
        """
        Validate that the supplied email address is unique for the
        site.

        """
        if User.objects.filter(email__iexact=self.cleaned_data['email']):
            raise forms.ValidationError(_("This email address is already in use. Please supply a different email address."))
        return self.cleaned_data['email']

كما ترون، لا تقوم هاتان الفئتان بالكتابة فوق الأساليب التي يحددها الآخر، لذا يجب أن تكون قادرًا على تحديد فئتك الخاصة على أنها:

from registration.forms import RegistrationFormUniqueEmail, RegistrationFormTermsOfService
class RegistrationFormTOSAndEmail(RegistrationFormUniqueEmail, RegistrationFormTermsOfService):
    pass

وينبغي أن تعمل، ولكنني لم أختبر هذا.أما مكان وضع هذا الفصل؛ forms.py هو موقع جيد.

تحديث:

القليل من القراءة في https://django-registration.readthedocs.org/en/latest/views.html مما يخبرنا أنه يمكننا تمرير عرض بعض المعلمات عبر تعريف عنوان url؛على سبيل المثال فئة النموذج.ما عليك سوى استخدام عنوان URL مثل:

url(r'^register/$',
    RegistrationView.as_view(form_class=RegistrationFormTOSAndEmail), 
    name='registration_register')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top