使用 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.bootstrapcdn.com/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.