Как проверить формы с помощью django и сколько способов проверить форму с помощью django - PullRequest
0 голосов
/ 02 февраля 2020

Я пробовал много способов проверки форм с использованием Django. но он не может проверить форму Django. Я вижу много документации и много видео для реализации проверки в форме. но это не сработает. Кто-нибудь может дать решение.
1. Сколько способов справиться с проверкой формы с использованием Django?
2. Что является лучшим способом справиться с проверкой формы с использованием Django?

Я попробовал этот способ для обработки ошибки проверки. но он не может работать

мой код

forms.py


from django.core.validators import validate_slug,validate_email
from django import forms
from .validators import validatenames

class validform(forms.Form):
    firstname = forms.CharField(max_length=10)
    class Meta:
        fields = ['firstname']

    def clean_firstname(self):
        name = self.cleaned_data.get('firstname')
        name_req = 'hari'  
        if not name_req in name:
            raise forms.ValidationError("Not a name")
        return name

просмотров. py

from django.shortcuts import render
from .forms import validform

# Create your views here.
def index(request):
    form = validform()
    return render(request,'index.html',{'form':form})

index. html

<form>
    {{ form.as_p }}
    <input type="submit" value="submit">
</form>

Я попробовал другой способ обработки ошибки проверки. это также не может работать

мой код

forms.py


from django.core.validators import validate_slug,validate_email
from django import forms
from .validators import validatenames

class validform(forms.Form):
    firstname = forms.CharField((validators=[validatenames]))
    class Meta:
        fields = ['firstname']

просмотров. py

from django.shortcuts import render
from .forms import validform

# Create your views here.
def index(request):
    form = validform()
    return render(request,'index.html',{'form':form})

index. html

<form>
    {{ form.as_p }}
    <input type="submit" value="submit">
</form>

validators.py


from django.core.exceptions import ValidationError  

def validatenames(value):
    if not 'hari' in value:
        raise ValidationError("Not a name")
    return value

Я не могу, где произошла ошибка

1 Ответ

1 голос
/ 02 февраля 2020

Django может обработать проверку на стороне сервера для вас. Два примера, которые вы разместили выше, являются двумя действительными способами сделать это, и они почти правильны. Вам просто нужно передать некоторые данные в форму для проверки. Поэтому, если вы измените свое представление на

# Create your views here.
def index(request):
    form = validform(request.GET or None)
    return render(request,'index.html',{'form':form})

, оно будет отображать ошибку на вашей странице html, если пользователь введет что-то еще, кроме 'hari' во входных данных.

На стороне сервера означает, что ваши данные отправляются на сервер и проверяются там, возвращаются с сообщением об ошибке или в случае, если данные недействительны.

Когда мы говорим о проверке на стороне клиента, это делается клиентом ( т. е. браузер пользователя) перед отправкой данных на сервер. Это не обрабатывается django. Для выполнения sh вы можете использовать встроенную проверку html5 или javascript для написания пользовательских методов проверки. Примеры встроенной проверки html5: number input: если пользователь вводит букву в такое поле и пытается отправить форму, появляется сообщение, сообщающее пользователю, что он должен ввести действительное число. Встроенные валидации проще в использовании, так как не требуют никаких javascript, но имеют ограничения, например, вы не можете определить свои собственные сообщения об ошибках.

Чтобы добиться валидации в вашем посте с валидацией на стороне клиента, вы можно использовать атрибут «шаблон» ввода. Шаблон - это регулярное выражение, используемое для проверки. Например,

<input type="text" pattern="/hari/">

покажет в браузере всплывающую подсказку о том, что ввод не является допустимым шаблоном, если пользователь пытается отправить форму, которая не содержит «хари» в качестве имени.

Вы можете добавить этот атрибут при создании вашей формы, например, переопределив метод __init__ вашей формы:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['firstname'].widget.attrs.update({'pattern': '/hari/'})

Если вам нужны пользовательские сообщения и т.д. c. вам нужно написать javascript.

Как вы можете видеть, проверка на стороне клиента является довольно обширной темой, возможно, вы хотели бы прочитать некоторые документы по этому поводу, например these , также содержащие примеры .

Последнее слово: проверка на стороне клиента и проверка на стороне сервера не являются вопросом того или другого. Вы всегда должны использовать проверку на стороне сервера, поскольку она намного надежнее. Проверка на стороне клиента является дополнительным преимуществом, улучшающим взаимодействие с пользователем, но никогда не должна быть единственным методом проверки.

...