почему form.is_valid возвращает false? с этой ошибкой? - PullRequest
0 голосов
/ 17 октября 2019

что это за ошибка ????

<ul class="errorlist"><li>username<ul class="errorlist"><li>This field is required.</li></ul></li><li>password<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

html файл

<form name="form" action="/accounts/logincheck" method="POST" >
          {% csrf_token %}
          <div class="container">

              <div class="login">
                <h1>Login to your account</h1>

                    <input type="text" name="u" placeholder="Username" required="required"/>
                    <input type="password" name="p" placeholder="Password" required="required"/>
                    <button type="submit" class="btn btn-primary btn-block btn-large">Login</button>

              </div>
          </div>
      </form>

Файл View.py

def logincheck(request):
    if request.method == "POST":
        MyLoginForm = LoginForm(request.POST)

        if MyLoginForm.is_valid():
            username = MyLoginForm.cleaned_data['u']
            password = MyLoginForm.cleaned_data['p']
            print("Username : "+username)
            print("Password : "+password)
            response = redirect("/login")
        else:
            print(MyLoginForm.errors)
            response = redirect("/logout")
    else:
        response = redirect("/profile")

    return response

forms.py

from django import forms

class LoginForm(forms.Form):
   username = forms.CharField(max_length=100)
   password = forms.CharField(widget=forms.PasswordInput())

Я не знаю, почему form.is_valid возвращает false, и даже ошибка не интерпретируется мне !! что это на самом деле говорит!

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вместо использования u и p в названии полей ввода, вы должны использовать username и password.

<input type="text" name="username" id="username" placeholder="Username" required="required"/>
<input type="password" name="password" id="username" placeholder="Password" required="required"/>

Кроме того, обновите представление для получения данных из username и password:

def logincheck(request):
    if request.method == "POST":
        my_login_form = LoginForm(request.POST)

        if my_login_form.is_valid():
            username = my_login_form.cleaned_data['username']
            password = my_login_form.cleaned_data['password']
            # authentication should be done here. documentation: https://docs.djangoproject.com/en/2.2/topics/auth/default/
            return redirect('/profile')

Наконец, когда вы работаете с формами django, почему бы не использовать их вtemplate?

Для этого вам нужно отправить данные формы в шаблон, например:

def logincheck(request):
    my_login_form = LoginForm(request.POST or None)
    if request.method == "POST":
        if my_login_form.is_valid():
            username = my_login_form.cleaned_data['username']
            password = my_login_form.cleaned_data['password']
            # authentication should be done here. documentation: https://docs.djangoproject.com/en/2.2/topics/auth/default/
            return redirect('/profile')
     return render('logincheck_template.html', context={'form':my_login_form})

И использовать его template:

<div class="login">
    <h1>Login to your account</h1>
       {% for field in form %}
           {{ field.errors }}
           {{ field.label_tag }} {{ field }}
       {% endfor %}
        <button type="submit" class="btn btn-primary btn-block btn-large">Login</button>
 </div>
0 голосов
/ 17 октября 2019

Ваше мнение неверно. Сначала вам нужно аутентифицировать пользователя, а затем, если учетные данные пользователя верны, вы можете перенаправить на такой URL-адрес, как этот.

Измените свое представление следующим образом.

def logincheck(request):
     if request.method == "POST":
        MyLoginForm = LoginForm(request.POST)

        if MyLoginForm.is_valid():
            username = MyLoginForm.cleaned_data['u']
            password = MyLoginForm.cleaned_data['p']
            print("Username : ",username)
            print("Password : ",password)
            user = authenticate(request,username=u,password=p)
            if user is not None:
                return redirect("some-path")
     else:
             MyLoginForm = LoginForm()
     return render(reuqest,'your_login_template',{'form': MyLoginForm})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...