Django之form組件自動校驗數據實現

發布時間:2020-01-20 21:32 來源:互聯網 當前欄目:網站服務器

一、form介紹

我們之前在HTML頁面中利用form表單向后端提交數據時,都會寫一些獲取用戶輸入的標簽并且用form標簽把它們包起來。

與此同時我們在好多場景下都需要對用戶的輸入做校驗,比如校驗用戶是否輸入,輸入的長度和格式等正不正確。如果用戶輸入的內容有錯誤就需要在頁面上相應的位置顯示對應的錯誤信息.。

Django form組件就實現了上面所述的功能。

總結一下,其實form組件的主要功能如下:

生成頁面可用的HTML標簽  對用戶提交的數據進行校驗 保留上次輸入內容

二、普通方式手寫注冊功能

views.py

# 注冊
def register(request):
  error_msg = ""
  if request.method == "POST":
    username = request.POST.get("name")
    pwd = request.POST.get("pwd")
    # 對注冊信息做校驗
    if len(username) < 6:
      # 用戶長度小于6位
      error_msg = "用戶名長度不能小于6位"
    else:
      # 將用戶名和密碼存到數據庫
      return HttpResponse("注冊成功")
  return render(request, "register.html", {"error_msg": error_msg})

register.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>注冊頁面</title>
</head>
<body>
<form action="/reg/" method="post">
  {% csrf_token %}
  <p>
    用戶名:
    <input type="text" name="name">
  </p>
  <p>
    密碼:
    <input type="password" name="pwd">
  </p>
  <p>
    <input type="submit" value="注冊">
    <p >{{ error_msg }}</p>
  </p>
</form>
</body>
</html>

三、使用form組件實現注冊功能

views.py

先定義好一個RegForm類:

from django import forms

# 按照Django form組件的要求自己寫一個類
class RegForm(forms.Form):
  name = forms.CharField(label="用戶名")
  pwd = forms.CharField(label="密碼")

再寫一個視圖函數:

# 使用form組件實現注冊方式
def register2(request):
  form_obj = RegForm()
  if request.method == "POST":
    # 實例化form對象的時候,把post提交過來的數據直接傳進去
    form_obj = RegForm(request.POST)
    # 調用form_obj校驗數據的方法
    if form_obj.is_valid():
      return HttpResponse("注冊成功")
  return render(request, "register2.html", {"form_obj": form_obj})

register2.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>注冊2</title>
</head>
<body>
  <form action="/reg2/" method="post" novalidate autocomplete="off">
    {% csrf_token %}
    <div>
      <label for="{{ form_obj.name.id_for_label }}">{{ form_obj.name.label }}</label>
      {{ form_obj.name }} {{ form_obj.name.errors.0 }}
    </div>
    <div>
      <label for="{{ form_obj.pwd.id_for_label }}">{{ form_obj.pwd.label }}</label>
      {{ form_obj.pwd }} {{ form_obj.pwd.errors.0 }}
    </div>
    <div>
      <input type="submit" class="btn btn-success" value="注冊">
    </div>
  </form>
</body>
</html>
        
 
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、