Как взять данные из HTML Inputs и использовать их в форме?

Я пытаюсь получить логин и пароль пользователя из HTML-шаблона (из ) и использовать эти входные данные для обработки. Я хочу использовать входные данные из HTML-шаблона, а не обычные формы Django, такие как:

<label class="form-label">Username</label>
{{ form.username }}
<span>{{ form.errors.username }}</span>

Это часть HTML-шаблона:

<form method="post">
{% csrf_token %}
<div class="mb-[22px]">
<input type="username" placeholder="Username"
                                   class="w-full px-5 py-3 text-base transition bg-transparent border rounded-md outline-none border-stroke dark:border-dark-3 text-body-color dark:text-dark-6 placeholder:text-dark-6 focus:border-primary dark:focus:border-primary focus-visible:shadow-none"
/>
</div>
<div class="mb-[22px]">
<input type="password" placeholder="Password"
                                   class="w-full px-5 py-3 text-base transition bg-transparent border rounded-md outline-none border-stroke dark:border-dark-3 text-body-color dark:text-dark-6 placeholder:text-dark-6 focus:border-primary dark:focus:border-primary focus-visible:shadow-none"
/>
</div>

Это класс из файла forms.py:

from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.forms import CharField, TextInput, EmailField, EmailInput, PasswordInput
from users.validators import validate_email


class RegisterForm(UserCreationForm):
    username = CharField(
        max_length=50,
        min_length=3,
        required=True,
        widget=TextInput(attrs={"class": "form-control"}),
    )
    email = EmailField(
        max_length=320,
        validators=[validate_email],
        required=True,
        widget=EmailInput(attrs={"class": "form-control"}),
    )
    password1 = CharField(
        required=True,
        widget=PasswordInput(attrs={"class": "form-control"}),
    )
    password2 = CharField(
        required=True,
        widget=PasswordInput(attrs={"class": "form-control"}),
    )

    class Meta:
        model = User
        fields = ("username", "email", "password1", "password2")


class LoginForm(AuthenticationForm):
    username = CharField(
        max_length=50,
        min_length=3,
        required=True,
        widget=TextInput(attrs={"class": "form-control"}),
    )
    password = CharField(
        required=True,
        widget=PasswordInput(attrs={"class": "form-control"}),
    )

    class Meta:
        model = User
        fields = ("username", "password")

Как правильно сопрягать эти элементы кода?

Думаю, вам просто не хватает FormView. Следующий пример делает некоторые предположения о том, что вы собираетесь делать с формой. Например, я прочитал ваше утверждение "и не обычные формы Django", чтобы сказать, что вы хотите больше контроля, и поэтому предложенный ниже пример включает регистрацию пользователя. В том виде, в котором написан мой пример, он конкурирует с вашим LoginForm, поскольку вы наследуете от AuthenticationForm, который также выполняет вход в систему в своем методе clean(). Учитывая это, пожалуйста, не забывайте корректировать этот пример в соответствии с вашими реальными потребностями.

from django.contrib.auth import authenticate, login
from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from .forms import LoginForm

class LoginView(FormView):
    form_class = LoginForm
    template_name = 'login.html'  # replace with your login template
    success_url = reverse_lazy('home')  # replace with your success url

    def form_valid(self, form):
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password')
        user = authenticate(username=username, password=password)

        if user is not None:
            login(self.request, user)
            return super().form_valid(form)

        form.add_error(None, "Invalid username or password")
        return super().form_invalid(form)
Вернуться на верх