Невозможно войти в систему с помощью Django

Это мой вид входа

def login_request(request):
    if request.method == 'POST':
        username = request.POST.get['username']
        password = request.POST.get['password']

        user = authenticate(username = username, password = password)
        if user is not None:
            form = login(request, user)
            messages.success(request, f' welcome {username} !!')
            return redirect('index')
        else:
            messages.info(request, f'Unable to Login now')

    form = AuthenticationForm()
    context = {'form':form}
    return render(request, "BizzyCardApp/log-in.html", context)

и это файл log-in.html

{% extends "BizzyCardApp/base.html" %}

{% block content %}

{% load crispy_forms_tags %}

<br>
<br>
<br>
<br>
<br>

<div class="container center oswald" id="grad"  style="border-radius: 10%; width: 300px;">  
    <br>
    <form>
    <table class="table table-borderless table-responsive container">
      <tbody>
        <tr>
          <div class="mb-3 mt-3">
            <form method="POST">
                {% csrf_token %}
                
                {% for field in form %}
                    <div>
                    <p>{{ field.label }}: <br> {{ field }}</p> 
                    {% for error in field.errors %}
                        <small style="color: red">{{ error }}</small>
                    {% endfor %}
                    </div>
                {% endfor %}
            </form> 
          </div>
        </tr>
        <tr>
          <div class="d-flex justify-content-center">
            <button type="submit" class="btn btn-light center text-center">Submit</button>
          </div>
        </tr>
      </tbody>
    </table>
    </form>
    <div class="text-center">
      <a href="/sign-up/" class="link-dark">
          Don't have an account? Sign Up
      </a>
    </div>
  </div>

{% endblock %}

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

http://127.0.0.1:8000/login/?csrfmiddlewaretoken=0rkrC5wOe8LDQc9x0s0Zdag45PXRZixJAYaQns3dod58QhUL6OdmTEvZMYdRNTfq&username=tushar&password=abcd123*

Попробуйте этот вид входа:

def login_request(request):
    if request.method == 'GET':
        if request.user.is_authenticated:
            return redirect('/index/')
    if request.method=='GET':
        form = loginForm(request.POST)
        if form.is_valid():

            user=authenticate(username=form.cleaned_data['username'],
                              password=form.cleaned_data['password'])
            if user:
                print('user',user)
                login(request,user)
                return redirect('/index/')
            else:
                print('Not authenticated')
    elif request.method=='GET':
        if request.user.is_authenticated:
            return redirect('/index/')
        form=loginForm()
    return render(request,'users/login.html',{'form':form})

В файле forms.py:

Добавьте это:

class CustomAuthenticationForm(AuthenticationForm):
    def confirm_login_allowed(self, user):
        if not user.is_active or not user.is_validated:
            raise forms.ValidationError('There was a problem with your login.', code='invalid_login')

В представлении входа измените AuthenticationForm на CustomAuthenticationForm. И импортируйте ее в представление входа в систему, используя следующий код.

from .form import CustomAuthenticationForm

Наконец-то нашел ответ. Метод для тега не был указан как POST.

Тег был просто, а не

Бэкенд продолжал получать GET-запросы вместо этого, и поэтому код не работал.

Вот код метода Login, который я использую сейчас


def Login(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:
            form = auth_login(request, user)
            messages.success(request, f' welcome {username} !!')
            return redirect('/')
        else:
            messages.info(request, f'account done not exit plz sign in')
    form = AuthenticationForm()
    return render(request,'BizzyCardApp/log-in.html',{'form':form})
Вернуться на верх