मैं एक ट्यूटोरियल का अनुसरण कर रहा हूं जिसने निम्नलिखित पंजीकरण फॉर्म बनाया है:

from django.contrib.auth.forms import UserCreationForm

class RegistrationForm(UserCreationForm):
    email = forms.EmailField(required = True)

    class Meta:
        model = User
        fields = (
            'username',
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2'
        )

        def save(self, commit = True):
            user = super(RegistrationForm, self).save(commit= False)
            user.first_name = self.cleaned_data['first_name']
            user.last_name = self.cleaned_data['last_name']
            user.email = self.cleaned_data['email']

            if commit:
                user.save()

                return User

class Meta के बाहर केवल email = forms.EmailField(required = True) का ही उल्लेख क्यों किया गया है, इसका उद्देश्य क्या है?

1
Justin O'Brien 11 अगस्त 2017, 17:16

3 जवाब

email फ़ील्ड पर contrib.auth.AbstractUser (जो User द्वारा उपवर्गित है) में है:

email = models.EmailField(_('email address'), blank=True)

जिसका अर्थ है कि इसे रिक्त होने की अनुमति है।

क्योंकि हम चाहते हैं कि यह फॉर्म में आवश्यक हो (ट्यूटोरियल के प्रयोजनों के लिए मुझे लगता है), हमें इसे स्पष्ट रूप से घोषित करना चाहिए।

0
Siegmeyer 11 अगस्त 2017, 17:49

यदि आप django में उपयोगकर्ता पंजीकरण प्रणाली बनाना चाहते हैं तो आप इसके भीतर form.py फ़ाइल पेस्ट बना सकते हैं:

from django import forms
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError


class RegisterUserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'input'}))
    password2 = forms.CharField(label="Repeat password", widget=forms.PasswordInput(attrs={'class': 'input'}))

    class Meta:
        model = User
        fields = ['username', 'email']
        widgets = {
            'username': forms.TextInput(attrs={'class': 'input'}),
            'email':    forms.EmailInput(attrs={'class': 'input'})
        }

    # Validating password
    def clean_password2(self):
        cd = self.cleaned_data
        if cd['password2'] != cd['password']:
            raise ValidationError("Password don't match")

        return cd['password2']

और view.py . में

-*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.http import HttpResponseForbidden, HttpResponse
from django.shortcuts import render

# Create your views here.
from django.views.generic import CreateView

from account.forms import RegisterUserForm


class RegisterUserView(CreateView):
    form_class = RegisterUserForm
    template_name = "account/register.html"

    def dispatch(self, request, *args, **kwargs):
        if request.user.is_authenticated():
            return HttpResponseForbidden()

        return super(RegisterUserView, self).dispatch(request, *args, **kwargs)

    def form_valid(self, form):
        user = form.save(commit=False)
        user.set_password(form.cleaned_data['password'])
        user.save()
        return HttpResponse('User registered')

हम यह सुनिश्चित करने के लिए dispath() पद्धति को ओवरराइड करते हैं कि उपयोगकर्ता फ़ॉर्म तक पहुंच सकता है यदि और केवल यदि वह प्रमाणित नहीं है। और form_valid विधि के लिए हम set_password() विधि का उपयोग करके पासवर्ड एन्क्रिप्ट करते हैं और फिर हम डेटाबेस के लिए प्रतिबद्ध होते हैं। जैसा कि मैंने किया था HttpResponse() लौटने के बजाय सफलता मिलने पर आप संभवत: उपयोगकर्ता को पुनर्निर्देशित करेंगे।

0
Community 20 जून 2020, 12:12

क्योंकि डिफ़ॉल्ट UserCreationForm में EmailField नहीं होता है जो ईमेल का प्रतिनिधित्व करता है। लेकिन इसके अन्य क्षेत्र हैं और उन्हें जोड़ने की कोई आवश्यकता नहीं है।

यदि आपने कोई विशेष फ़ील्ड जोड़ा है जो UserCreationForm में शामिल नहीं है, जैसे EmailField तो आपको उसे वहां जोड़ना होगा।

0
T. Short 24 पद 2019, 20:03