2

auth Userモデルのいくつかの組み込みを利用するカスタムユーザーアカウントをすでに定義し、ユーザーリンクを使用して、データベースにユーザーを登録するために必要ないくつかの追加フィールドにこれらをリンクします。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

私のmodels.pyから関連

# additional model to incorporate our custom fields to the auth user model                                                                                   
class Account(models.Model):
    user = models.OneToOneField(User)      #link (pointer) to the users other information in User model                                                      
    birthdate = models.DateField(blank = True, ) # True makes this field optional                                                                            
    gender = models.CharField(max_length = 1, choices = GENDER_CHOICE, null = True, blank = True)                                                                                    

    def __unicode__(self):            # define a unicode for the user to access                                                                              
        return u'%s %s' % (self.user.first_name, self.user.last_name)   # return first and last name in shell  


# custom form to gather information from the user for a new account                                                                                          
class UserRegistration(UserCreationForm):
#class RegistrationForm(forms.ModelForm):                                                                                                                    
    class Meta:
        model = User
        fields = ("first_name", "last_name", "email", "username", "password1", "password2",)

    # ensures uniqueness of user email addresses when registering                                                                                         
    def clean_email(self):
        print "In custom creation"
        email = self.cleaned_data.get(email = 'email')
        username = self.cleaned_data.get(username = 'username')
        # checks if email address already exists                                                                                                          
        if User.objects.filter(email__iexact = self.cleaned_data['email']):
            print "Email exists"
#           if email and User.objects.filter(email__iexact = email).exclude(username=username).exists():                                                     
                raise forms.ValidationError(u'Email Address is currently used by another user.')
        return email

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

views.pyから関連

def Main(request):
    if request.user.is_authenticated():
        latest_events = Event.objects.all().order_by('-created')[:10] # Returns latest 10 events                                                              
        my_events = Event.objects.filter(creator=request.user)[:10]   # Returns up to 10 events created by current User                                       
        my_calendars = Calendar.objects.filter(creator=request.user)  # Returns all calendars created by the user                                             
        authForm = None
        loginForm = None
        headerType = "header.html"
    else:
        latest_events = None
        my_events = None
        my_calendars = None
        headerType = "header_main.html"

        authForm = UserRegistration(request.POST or None)
        print "Creating account UserRegistration" # TESTING PRINT                                                                                             
        print "User email = %s " %(User._meta.get_field('email'))
        if request.method == 'POST':
            if authForm.is_valid():
                newUser = authForm.save(commit=False)
                newUser.save()
                newUser = authenticate(username=request.POST['username'], password=request.POST['password1'])
                login(request, newUser)

                return HttpResponseRedirect('/signup/')
....
....
more code on success redirection
....
....

~~~~~~~~~~~~~~~~~~~~~~~~~~~

(私はあまり多くのコードを投稿しなかったと思います、ただ徹底したかっただけです)

ご覧のとおり、最近行ったコメントアウトの試みがいくつかあります。'registration'をダウンロードしてRegistrationFormUniqueForm()に組み込まれているものを使用してみましたが、すでに機能しているので、実際には新しい登録フォームを作成したくありません。

私は別の提案、コメントの下のコードを試すことに移りました

# custom form to display additional sign up information

すでに登録されているメールアドレスで新規ユーザーを登録しようとすると、エラーは発生せず、登録が許可されました。また、ユーザーの電子メールを変更してみたところ、異議を唱えることなく、すでに受信した電子メールに変更できました。

ユーザー登録を、すでに取得されている可能性のある電子メールアドレスで登録しようとする各個人に対して一意のロックを維持させる方法を誰かが提案できますか?彼らが彼らの電子メールを現在のユーザーによって取られたものに変えるのを防ぐだけでなく?

前もって感謝します。

編集:モデル登録フォームdef clean_email()とビューのdefに変更を加えて、現在持っているものがまだ機能しないことを反映しました。

4

1 に答える 1

3

メソッドのインデントは、clean_emailどちらの形式でも間違っています。現時点では、これらはMetaクラスのメソッドであるため、呼び出されることはありません。たとえば、登録フォームは次のようになります。

class RegistrationForm(UserCreationForm):
#class RegistrationForm(forms.ModelForm):                                                                                                                    
    class Meta:
        model = User
        fields = ("first_name", "last_name", "email", "username", "password1", "password2",)

    def clean_email(self):
        """ensures uniqueness of user email addresses when registering"""
        email = self.cleaned_data.get('email')

これは本当の問題ではないかもしれません-コードをスタックオーバーフローに貼り付けるときにインデントを間違えるのは簡単です。その場合は、回答を削除します。

于 2012-05-21T21:01:13.320 に答える