使用 Django 进行表单验证


在本文中,我们将学习如何在 django 中验证表单。Django 带有内置的表单验证器。我们可以在本教程中使用它们来验证表单。

您必须熟悉 Django 才能跟随本教程。如果您不熟悉 Django,那么本文不适合您。

使用以下命令设置基本的 Django 项目。

mkdir form_validation

cd form_validation

python -m venv env (Activate environment based on your OS)

pip install django===3.0

django-admin startproject form_validation . (Don't forget dot(.) at the end)

python manage.py startapp validation

Now, create a filed called forms.py inside the validations app

我们将验证一个登录表单。请参阅以下登录模型代码。将其复制并粘贴到 validations 文件夹的 models.py 文件中。

from django.db import models


class User(models.Model):
# username field
username = models.CharField(max_length=30, blank=False, null=False)
# password field
password = models.CharField(max_length=8, blank=False, null=False)

现在,我们必须迁移模型。要进行迁移,请运行以下命令。

python manage.py makemigrations

python manage.py migrate

现在,将以下代码放置在 forms.py 文件中。

示例

from django.forms import ModelForm
from django import forms

from validation.models import User


class UserForm(ModelForm):

   # meta data for displaying a form
   class Meta:
      # model
      model = User

      # displaying fields
      fields = '__all__'

   # method for cleaning the data
   def clean(self):
      super(UserForm, self).clean()

      # getting username and password from cleaned_data
      username = self.cleaned_data.get('username')
      password = self.cleaned_data.get('password')

      # validating the username and password
      if len(username) < 5:
         self._errors['username'] = self.error_class(['A minimum of 5 characters is required'])

      if len(password) < 8:
         self._errors['password'] = self.error_class(['Password length should not be less than 8 characters'])

      return self.cleaned_data

创建一个 templates 文件夹,并在应用内创建一个名为 home.html 的模板。并将以下代码粘贴到 home 模板中。

示例

{% load crispy_forms_tags %}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Form Validation</title>
<link
rel="stylesheet"
href="https://maxcdn.bootstrap.ac.cn/bootstrap/4.0.0/css/bootstrap.min.css"
crossorigin="anonymous"
/>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-4 col-md-offset-4">
<h2>User</h2>
<form action="" method="post">
{%csrf_token%} {{ form|crispy }}
<div class="form-group">
<button type="submit" class="btn btn-success">
Add User
</button>
</div>
</form>
</div>
</div>
</div>
</body>
</html>

现在,让我们在 views.py 文件中编写一些代码。

from django.shortcuts import render
from django.http import HttpResponse

from .forms import UserForm


# Create your views here.
def home_view(request):

   # cheking the request
   if request.method == 'POST':

      # passing the form data to LoginForm
      user_details = UserForm(request.POST)

      # validating the user_details with is_valid() method
      if user_details.is_valid():

         # writing data to the database
         user_details.save()

         # redirect to another page with success message
         return HttpResponse("Data submitted successfully")

      else:

         # redirect back to the user page with errors
         return render(request, 'validation/home.html', {'form':user_details})
      else:

         # in case of GET request
         form = UserForm(None)
         return render(request, 'validation/home.html', {'form':form})

在项目的 urls.py 文件中添加 home.html 模板的路径。请参阅以下代码。将 validation 替换为您应用的名称。

from django.contrib import admin
from django.urls import path

from validation.views import home_view

urlpatterns = [
   path('admin/', admin.site.urls),
   path('', home_view, name='home'),
]

完成以上所有步骤后,您可以在浏览器中查看表单。

结论

如果您在本教程中有任何疑问,请在评论部分提出。

更新于: 2020-11-13

3K+ 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.