<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Django-Form組件

      Form組件

      Form組件的作用:
      對前段Form表單POST的數據進行格式效驗

      常用參數:

      • is_valid():如果Form表單POST的數據都能通過,就會返回True,否則返回Flase

      • cleared_data: 數據效驗通過就會以字典的形式存儲在里面

      • errors:存儲錯誤字段和信息 。表面是HTML標簽類型,實際上是字典

      示例:注冊頁面

      views視圖函數:
      from django.shortcuts import render,HttpResponse
      from django import forms
      # Create your views here.
      
      class UserForm(forms.Form):
      
          user = forms.CharField(min_length=4)
          pwd = forms.CharField(min_length=4)
          r_pwd = forms.CharField(min_length=4)
          email = forms.EmailField(max_length=32)
          tel = forms.IntegerField()
          addr = forms.CharField(max_length=32)
      
      def reg(request):
      
          if request.method=="POST":
              form=UserForm(request.POST)
              if form.is_valid():
                  print(form.cleaned_data)       # 所有干凈的字段以及對應的值
              else:
                  print(form.cleaned_data)       #
                  print(form.errors)             # ErrorDict : {"校驗錯誤的字段":["錯誤信息",]}
                  #  <ul class="errorlist"><li>pwd<ul class="errorlist"><li>Ensure this value has at least 4 characters (it has 3).</li></ul></li></ul>
                  print(type(form.errors)) #  <class 'django.forms.utils.ErrorDict'>
                  print(type(form.errors.get("pwd"))) # ErrorList ["錯誤信息",] --> <class 'django.forms.utils.ErrorList'>
                  print(form.errors.get("pwd")[0]) # ErrorList ["錯誤信息",] ---> Ensure this value has at least 4 characters (it has 3).
          return HttpResponse("OK")
      return render(request,"reg.htm
      
      html模板頁面
      <form method="post">
      {% csrf_token %}
      <p>user<input type="text" name="user"></p>
      <p>pwd<input type="password" name="pwd"></p>
      <p>r_pwd<input type="password" name="r_pwd"></p>
      <p>email<input type="email" name="email"></p>
      <p> tel<input type="tel" name="tel"></p>
      <p> addr<input type="text" name="addr"></p>
      <input type="submit" >
      

      模板的渲染方式一:

      視圖函數頁面:
          form = UserForm()  # 實例化 然后傳入模板中調用
          eturn render(request,"reg.html",locals())
      
      HTML模板頁面:
          {# 使用Formu組件創建輸入框 #}
      <form method="post">
          {% csrf_token %}
          <p>user{{form.user}}</p>
          <p>pwd{{form.pwd}}</p>
          <p>r_pwd{{form.r_pwd}}</p>
          <p>email{{form.email}}</p>
          <p>tel{{form.tel}}</p>
          <p>addr{{form.addr}}</p>
          <input type="submit" >
      </form>
      

      模板渲染效果:
      效果圖

      模板的渲染方式二:

      直接調用UserForm實例化對象的屬性,推薦使用

      <p>使用Formu組件渲染方式二 </p>
      <form method="post">
          {% csrf_token %}
      
          {% for form_obj in form %}
              <div>
                  <label for="">{{ form_obj.label }}</label>
                  {{ form_obj }}
              </div>
          {% endfor %}
          <input type="submit" >
      </form>
      

      模板渲染效果:
      模板渲染效果

      如果想更改 input標簽前面的名字,可以在類 UserForm里設置lable屬性即可,示例:

      class UserForm(forms.Form):
          user = forms.CharField(min_length=4,label="用戶名")
          pwd = forms.CharField(min_length=4,label="設置想要的值")
          r_pwd = forms.CharField(min_length=4)
          email = forms.EmailField(max_length=32)
          tel = forms.IntegerField()
          addr = forms.CharField(max_length=32)
      

      渲染效果:
      效果圖

      模板的渲染方式三:

      使用UserForm對象的屬性:
      1. as_p:固定樣式: 標簽屬性不可更改

      <p><label for="id_user">User:</label> <input type="text" name="user" minlength="4" required="" id="id_user"></p>
      

      效果圖

      2.  as_ul: 固定樣式: 標簽屬性不可更改
      <li><label for="id_user">User:</label> <input type="text" name="user" minlength="4" required="" id="id_user"></li>
      

      模板渲染效果:
      效果圖

      實現重置和顯示錯誤信息

      視圖頁面:
          if request.method=="POST":
          form=UserForm(request.POST)
          if form.is_valid():
              print(form.cleaned_data)       # 所有干凈的字段以及對應的值
          else:
              print(form.cleaned_data)       #
              print(form.errors)             # ErrorDict : {"校驗錯誤的字段":["錯誤信息",]}
              return render(request, "reg.html", locals())  # 添加個返回值,將已有數據的UserForm的對象傳入模板中
      
      模板頁面:
      <p>使用For組件渲染方式一 </p>
      <form method="post">
          {% csrf_token %}
          <p>user{{form.user}}</p><span>{{ form.user.errors.0 }}</span>
          <p>pwd{{form.pwd}}</p><span>{{ form.pwd.errors.0 }}</span>
          <p>r_pwd{{form.r_pwd}}</p><span>{{ form.r_pwd.errors.0 }}</span>
          <p>email{{form.email}}</p><span>{{ form.email.errors.0 }}</span>
          <p>tel{{form.tel}}</p><span>{{ form.tel.errors.0 }}</span>
          <p>addr{{form.addr}}</p><span>{{ form.addr.errors.0 }}</span>
          <input type="submit" >
      </form>
      

      給Form組件設置標簽類型,增加標簽屬性,自定義錯誤信息

      只需在類“UserForm”中定義相關屬性即可:
      1.widget=forms."標簽類型"(attr={"屬性":"值",})
      2.error_messages={"requied":"不能為空屬性值","invalid":"無效的屬性值",}
      示例如下:

      class UserForm(forms.Form):
      user = forms.CharField(min_length=4,label="用戶名",error_messages={"requied":"該字段不能為空","invalid":"無效的",},widget=forms.TextInput(attrs={"class":"form-control"}))
      pwd = forms.CharField(min_length=4,label="密碼",widget=forms.PasswordInput(attrs={"class":"form-control"}))
      r_pwd = forms.CharField(min_length=4,label="確認密碼",widget=forms.PasswordInput(attrs={"class":"form-control"}))
      email = forms.EmailField(max_length=32,label="郵箱",widget=forms.PasswordInput(attrs={"class":"form-control"}))
      tel = forms.IntegerField(label="手機號",widget=forms.TextInput(attrs={"class":"form-control"}))
      addr = forms.CharField(max_length=32,label="地址",widget=forms.TextInput(attrs={"class":"form-control"}))
      

      效果圖:
      效果圖

      局部鉤子

      對Form表單的每個字段進行逐個檢測

      示例:對用戶名,手機號進行檢測判斷

          # 局部鉤子
      def clean_user(self):
          '''
          對輸入的用戶名判斷是否已存在
          :return:
          '''
          print(self.cleaned_data)
          # 獲取效驗過字段的clear_data中的數據
          user = self.cleaned_data["user"]
          # 判斷用戶名是否存在
          ret = UserInfo.objects.filter(user=user).first()
          # 對數據庫查詢結果進行判斷
          if not ret: # 不存在即為False,返回對應值
              return self.user
          else: # 存在報錯
              raise ValidationError("該用戶已存在")
      
      def clean_tel(self):
          '''
          對手機號進行格式判斷
          :return:
          '''
          tel = self.cleaned_data["tel"]
          print(tel)
          # 對手機號長度進行判斷
          if len(tel) == 11:
              return self.tel
          else:
              raise ValidationError("手機號格式錯誤")
      

      效果圖:
      效果圖

      全局鉤子

      對Form表單的所有字段進行全局檢測
      示例:對兩次密碼進行檢測判斷

      HTML模板:
                      <p>使用For組件渲染方式一 </p>
                  <form method="post">
                      {% csrf_token %}
                      <p>user{{form.user}}</p><span class="errors pull-right">{{ form.user.errors.0 }}</span>
                      <p>pwd{{form.pwd}}</p><span class="errors pull-right">{{ form.pwd.errors.0 }}</span>
                      <p>r_pwd{{form.r_pwd}}</p><span class="errors pull-right">{{ form.r_pwd.errors.0 }}</span><span class="errors pull-right">{{ errors.0 }}</span>
                      <p>email{{form.email}}</p><span class="errors pull-right">{{ form.email.errors.0 }}</span>
                      <p>tel{{form.tel}}</p><span class="errors pull-right">{{ form.tel.errors.0 }}</span>
                      <p>addr{{form.addr}}</p><span class="errors pull-right">{{ form.addr.errors.0 }}</span>
                      <input type="submit" >
                  </form>
      
      視圖函數:
      def reg(request):
      print(request.POST)
      print(type(request.POST.get("tel")))
      if request.method=="POST":
          form=UserForm(request.POST)
          if form.is_valid():
              print(form.cleaned_data)       # 所有干凈的字段以及對應的值
          else:
              print(form.cleaned_data)       #
              print(form.errors)             # ErrorDict : {"校驗錯誤的字段":["錯誤信息",]}
      
             # 全局鉤子錯誤
              errors = form.errors.get("__all__")
              print(errors[0])  # 兩次密碼不一致
      

      效果圖:
      效果圖

      posted @ 2020-06-09 18:24  繁華無殤  閱讀(181)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲狠狠狠一区二区三区| 日韩av色一区二区三区| 狠狠色综合tv久久久久久| 男人的天堂av一二三区| 日本不卡一区| 伊人激情av一区二区三区| 国内极度色诱视频网站| 婷婷久久香蕉五月综合加勒比| 无套后入极品美女少妇| 无码人妻斩一区二区三区| 人妻av中文字幕无码专区| 亚洲国产一区二区在线| 人妻丰满熟妇av无码处处不卡| 高清性欧美暴力猛交| 风韵丰满妇啪啪区老老熟女杏吧 | 日韩亚洲精品国产第二页| 久久久久久久一线毛片| 国产美女遭强高潮免费| 亚洲国产色婷婷久久99精品91| 尤物yw193无码点击进入| 定西市| 九九热99精品视频在线| 亚洲人成电影在线天堂色| 欧美自拍另类欧美综合图片区| 92国产精品午夜福利免费| 久久永久视频| 中文字幕乱码中文乱码毛片| av明星换脸无码精品区| 精品国产精品午夜福利| 久久精品国产一区二区三| 又粗又紧又湿又爽的视频| 日韩人妻少妇一区二区三区| 亚洲综合一区二区三区| 精品一区二区三区蜜桃久| 精品一区二区不卡免费| 制服 丝袜 亚洲 中文 综合| 麻豆久久久9性大片| 精品无码一区二区三区的天堂| 欧美成人精品| 精品国产91久久粉嫩懂色| 国产精品视频中文字幕|