#django #django-views #django-authentication
#django #django-просмотры #django-аутентификация
Вопрос:
Я пытаюсь создать страницу входа в систему для своего приложения, но я не могу аутентифицировать пользователя, что бы я ни пытался в течение недели.
Вот мой код:
views.py
from django.shortcuts import render, HttpResponseRedirect
from django.urls import reverse
from django.contrib.auth import login, logout, authenticate
from django.db import IntegrityError
from .models import User
def login_view(request):
if request.method == "POST":
username = request.POST["username"]
password = request.POST["password"]
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return HttpResponseRedirect(reverse("index"))
else:
return render(request, "login.html", {"message": f"{user}"})
return HttpResponseRedirect(reverse("login"))
else:
return render(request, "login.html")
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
urls.py
from django.urls import path
from .views import index, login_view, register
urlpatterns = [
path("", index, name="index"),
path("login", login_view, name="login"),
path("register", register, name="register")
]
login.html
{% extends "layout.html" %}
{% block title %}Login{% endblock %}
{% block content %}
<div class="fluid-container">
<h3 id="header">Login</h3>
{% if message %}
<h4>{{ message }}</h4>
{% endif %}
<form method="post" class="form" action="{% url 'login' %}">{% csrf_token %}
<div class="form-group">
<input class="form-control" type="text" name="username" placeholder="Username" />
</div>
<div class="form-group">
<input class="form-control" type="password" name="password" placeholder="Password" />
</div>
<div class="form-group">
<input class="btn btn-primary" type="submit" value="Login" />
</div>
</form>
<p>Don't have an account? <a href="{% url 'register' %}">Register one here.</a></p>
</div>
{% endblock %}
Пользователь всегда None, но имя пользователя и пароль возвращаются правильно.
Комментарии:
1. как пользователь выглядит в базе данных, а также почему вы переопределяете AbstractUser, если вы не вносите никаких изменений
2. @iklinac Что вы имеете в виду, как выглядит пользователь? Функция регистрации работает, вот почему я не упомянул об этом, и поля совпадают с логином, именем пользователя и паролем. Я намерен изменить класс пользователя позже, но сначала я должен иметь возможность войти в систему.
3. как выглядит ваша пользовательская строка в базе данных, особенно интересует пароль
4. Ну, ты открыл мне глаза.. Я просто использовал «User.objects.create_user (имя пользователя, пароль)» в регистре, и это все испортило? Не уверен, почему, хотя изменение его на «User.objects.create_user (имя пользователя = имя пользователя, пароль = пароль)» устраняет проблему.