Django форма не сохраняет электронную почту - PullRequest
0 голосов
/ 16 июня 2020

Мои просмотры-

from django.shortcuts import render, redirect
from .AuthForms import registerUserForm
from django.contrib import messages
from django.contrib.auth import login, authenticate
def registerUsers(request):
    if request.method == 'POST':
        ucf = registerUserForm(request.POST)
        if ucf.is_valid():
            ucf.save()
            new_user = authenticate(username = ucf.cleaned_data['username'], password = ucf.cleaned_data['password1'])
            login(request, new_user)
            return redirect('content')
    else:
        ucf = registerUserForm()

    return render(request, 'LoginAndSignUp/SignUpPage.html', {'ucf': ucf})

Моя форма -

Я расширил форму создания пользователя

from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm , PasswordResetForm
from django import forms 
class registerUserForm(UserCreationForm):
    email = forms.EmailField(widget = forms.EmailInput(attrs={'placeholder':'Email', 'autocomplete':'off'}))
    username = forms.CharField(widget= forms.TextInput(attrs={'placeholder':'Username','autocomplete':'off',}))
    password1 = forms.CharField(widget= forms.PasswordInput(attrs={'placeholder':'Password'}))
    password2 = None

    class meta:
        model = User
        fields = ['username', 'email', 'password1']

class userLoginForm(AuthenticationForm):
    username = forms.CharField(widget= forms.TextInput(attrs={'placeholder':'Username','autocomplete':'off'}))
    password = forms.CharField(widget= forms.PasswordInput(attrs={'placeholder':'Password'}))


class userPasswordResetEmailForm(PasswordResetForm):
    email = forms.EmailField(widget = forms.EmailInput(attrs={'placeholder':'Enter your email', 'autocomplete':'off',}))

    class Meta:
        model = User
        fields = '__all__'

Вот мой шаблон. Я полагаю, что все правильно, но по-прежнему не сохраняется электронное письмо

<form novalidate action="" method="post">
{%csrf_token%}


<div class="fieldWrapper">
{{ucf.email.errors}}
{{ucf.email}}
</div>
<div class="fieldWrapper">
{{ucf.username.errors}}
{{ucf.username}}
</div>
<div class="fieldWrapper">
{{ucf.password1.errors}}
{{ucf.password1}}
</div>
<div style="margin-bottom: 4%;">
<span class="director">Already with us? <a href="{%url 'login'%}">Log In</a></span>
<div class="director">
    <a href="{%url 'content'%}"><i class="fa fa-compass"></i> Explore anonymously</a>
</div>
</div>
<button class="primaryButton" type="submit">Sign Up</button>
</form>

Поле электронной почты не сохраняет электронное письмо в базе данных, где имя пользователя и пароль сохраняются правильно. Кто-нибудь помогите пожалуйста

1 Ответ

0 голосов
/ 17 июня 2020

Кажется, ваш код в порядке. Я воссоздал ваш проект, и он работает как задумано. имя пользователя, пароль и адрес электронной почты сохраняются в таблице auth_user. Вот как выглядит мой:

urls.py

urlpatterns = [
    // other urls
    path('users/', register_users, name='create_user')
]

views.py

from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate

from users.forms import RegisterUserForm


def register_users(request):
    if request.method == 'POST':
        ucf = RegisterUserForm(request.POST)
        if ucf.is_valid():
            ucf.save()
            new_user = authenticate(username=ucf.cleaned_data['username'], password=ucf.cleaned_data['password1'])
            login(request, new_user)
            return redirect('content')
    else:
        ucf = RegisterUserForm()

    return render(request, 'users/sign_up_page.html', {'ucf': ucf})

forms.py

from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django import forms


class RegisterUserForm(UserCreationForm):
    email = forms.EmailField(widget=forms.EmailInput(attrs={'placeholder': 'Email', 'autocomplete': 'off'}))
    username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username', 'autocomplete': 'off'}))
    password1 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password'}))
    password2 = None

    class Meta:
        model = User
        fields = ['username', 'email', 'password1']

sign_up_page . html

<form novalidate action="" method="post">
    {% csrf_token %}


    <div class="fieldWrapper">
        {{ ucf.email.errors }}
        {{ ucf.email }}
    </div>
    <div class="fieldWrapper">
        {{ ucf.username.errors }}
        {{ ucf.username }}
    </div>
    <div class="fieldWrapper">
        {{ ucf.password1.errors }}
        {{ ucf.password1 }}
    </div>
    <div style="margin-bottom: 4%;">
{#        <span class="director">Already with us? <a href="{% url 'login' %}">Log In</a></span>#}
        <div class="director">
{#            <a href="{% url 'content' %}"><i class="fa fa-compass"></i> Explore anonymously</a>#}
        </div>
    </div>
    <button class="primaryButton" type="submit">Sign Up</button>
</form>
...