Почему мой собственный вид входа в систему с моей собственной моделью пользователя в Django не работает? - PullRequest
0 голосов
/ 24 сентября 2018

Я создал свою собственную модель пользователя в Django:

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), unique=True)
    is_active = models.BooleanField(_('active'), default=False)
    token_num = models.IntegerField(_('token count'), default=0)
    money_num = models.IntegerField(_('money count'), default=0)

    objects = UserManager()
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

Итак, я решил сделать свой собственный вид входа в систему.Вот оно:

def login(request):
if request.method == "POST":
    form = LoginForm(request.POST)
    email = request.POST.get('email')
    password = request.POST.get('password')
    user = authenticate(username=email, password=password)
    if user is not None and user.is_active:
        login(request, user)
        return HttpResponseRedirect("/main/")
else:
    form = LoginForm()
return render(request, 'registration/login.html', {'form': form})

Вот мой LoginForm:

class LoginForm(forms.Form):
    user_email = forms.EmailField(max_length=255)
    password = forms.CharField(max_length=255)
    class Meta:
        model = User
        fields = ('email', 'password')

И мой login.html:

{% extends 'base.html' %}

{% block title %}Login{% endblock %}
{% block content %}
<h2>Login</h2>
<form method="post">
  {% csrf_token %}
    {% for field in form %}
    <p>
      {{ field.label_tag }}<br>
      {{ field }}
      {% if field.help_text %}
        <small style="display: none">{{ field.help_text }}</small>
      {% endif %}
      {% for error in field.errors %}
        <p style="color:red">{{ error }}</p>
      {% endfor %}
    </p>
    {% endfor %}
  <button type="submit">Login</button>
</form>
{% endblock %}

А вот мой urls.py:

urlpatterns = [
url(r'^log/$', views.login)
]

Таким образом, проблема в том, что когда я ввожу все данные на странице входа, пользователь не входит в систему, и меня не перенаправляют на главную страницу.Страница логина перезагружается и все.PS Я уже создал 1 пользователя с электронной почтой и паролем.Этот пользователь is_active имеет значение True (1)

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Ваш LoginForm имеет поле user_email, но ваш код доступа email из request.POST;они должны быть одинаковыми.

Обратите внимание, что вам, вероятно, следует проверить form.is_valid() и получить данные из form.cleaned_data, а не напрямую из POST.Также обратите внимание, что ваша форма (правильно) не является ModelForm, поэтому внутренний класс Meta и его содержимое не имеют значения.

0 голосов
/ 24 сентября 2018

Я думаю, что проблема в вашем LoginForm.

Это не ModelForm, поэтому вы можете удалить класс Meta.

И ваше поле электронной почты называется user_email, нов представлении входа в систему вы пытаетесь получить email из параметров POST.

Попробуйте получить непротиворечивое имя, и вы сможете войти в систему.

...