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

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

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

      forms組件

      forms組件簡介

      小需求:獲取用戶數據并發送給后端校驗 后端返回不符合校驗規則的提示信息
          
      form組件
      	1.自動校驗數據
      	2.自動生成標簽
      	3.自動展示信息
          
      from django import forms
      
      
      class MyForm(forms.Form):
          username = forms.CharField(min_length=3, max_length=8)  # username字段最少三個字符最大八個字符
          age = forms.IntegerField(min_value=0, max_value=200)  # 年齡最小0 最大200
          email = forms.EmailField()  # 必須符合郵箱格式
          
       
      校驗數據的功能(初識)
      	 form_obj = views.MyForm({'username':'jason','age':18,'email':'123'})
          form_obj.is_valid()  # 1.判斷數據是否全部符合要求
          False  # 只要有一個不符合結果都是False
          form_obj.cleaned_data  # 2.獲取符合校驗條件的數據
          {'username': 'jason', 'age': 18}
          form_obj.errors  # 3.獲取不符合校驗規則的數據及原因
          {'email': ['Enter a valid email address.']}
      1.只校驗類中定義好的字段對應的數據,多傳的不做任何操作
      2.默認情況下類中定義好的字段都是必填的
      

      forms組件渲染標簽

      1.首先定義一個forms類
      from django import forms
      class Myform(forms.Form):
          username = forms.CharField(min_length=3, max_length=8)  # 最少三位,最大八位
          age = forms.IntegerField(min_value=0, max_value=200)  # 數字不能小于0,不能大于200
          email =forms.EmailField()  # 郵箱格式
      
      2.建立視圖函數
      def ab_forms_func(request):
          # 產生一個空對象
          form_obj = MyForm()
          # 將產生的空對象傳遞給html文件
          return render(request, 'html文件', locals())
      
      3.在html文件中渲染標簽
          方式一:
              {{ form_obj.as_p }}  # 頁面上會自動列出對應的字段名以及輸入框(以p標簽的形式)
              {{ form_obj.as_ul }}  # 以ul標簽的方式
              {{ form_obj.as_table }} # 以table標簽的方式
              會直接渲染出所有的字段名,封裝程度高,但是擴展性差,主要用于本地測試,實際項目基本不用
          
          方式二:
              {{ form_obj.username.lable }}
              {{ form_obj.username }} # 頁面中的寫法是兩個緊挨著,實際效果是會自動渲染出綁定了lable標簽的username輸入框
              封裝程度低,擴展性高,但是編寫比較麻煩,實際項目中也不怎么使用
              
          方式三:渲染出的實際效果與方式二一樣,但是編寫比方式二簡單
              {% for form in form_obj %} 
                  <p>
                      {{ form.lable }}
                      {{ form }}
                  </p>
              {% endfor %}
              
      注意事項:
          1.forms組件只負責渲染獲取用戶數據的標簽,其余的form標簽與按鈕都需要我們自己寫
          2.前端自帶校驗但是可以被修改,所以我們在使用forms組建的時候可以直接取消前端的校驗,統一由后端校驗
              <form action="" novalidate>  # 取消前端校驗
      

      forms組件展示信息

      當我們輸入的數據不符合規范時,需要給前端一個提示或者說需要將錯誤信息在前端展示出來
      后端代碼:
          def ab_forms_func(request):
              form_obj = MyForm()  # 產生一個空對象
              if request.method = 'POST':
                  form_obj = MyForm(request.POST)  # request.POST可以看成是一個字典,直接傳給forms校驗
                  if form_obj.is_valid():  # 校驗數據是否合法,合法的數據會放到cleaned_data中,不合法的放到errors中,其它多余的數據不管
                      print(form_obj.cleaned_data)
                  else:
                      print(form_obj.errors)
              return render(request, 'html文件', locals())  # 如果前端返回的是POST請求則將if中的form_obj返回給前端,否則返回第一個form_obj,所以兩個form_obj雖然不一樣,但是名字得一樣
          
      前端代碼:
          {% for form in form_obj %} 
            <p>
                {{ form.lable }}
                {{ form }}
                <span>{{ form.errors.0 }}</span>
            </p>    
          {% endfor %}
          
      正常情況下頁面上顯示的錯誤信息為英文,我們可以將它修改為各國語言
      方式一:自定義
          我們在定義字段對象的時候可以給字段對象添加一個errors_messages參數
              username = forms.CharField(min_length=3, max_length=8, errors_messages={
                  'min_length': '用戶名最少三個字符',
                  'max_length': '用戶名最多八個字符',
                  'required': '用戶名不能為空'
              })
              添加過errors_messages參數以后傳遞給前端的錯誤信息就會直接從這里面拿取
           
      方式二:修改系統語言環境
          在settings配置文件中有一個參數是用來控制系統語言的  LANGUAGE_CODE = 'en-us' 默認為英文
          from django.conf import global_settings  # global_settings是Django內部真正的配置文件,我們可以配置的系統環境語言在里面都能看到
      

      forms組件校驗補充

      forms組件針對字段數據的校驗提供了三種類型的校驗方式(三種校驗方式可以一起使用)
      1.直接填寫參數
      2.使用正則表達式
          首先導入一個正則校驗模塊 form django.core.validators import RegexValidator
          正則校驗導入以后就可以使用validators參數來編寫正則校驗
              phone = forms.CharField(validators=[RegexValidator(r'^[0-9]+$', '請輸入數字')])  # 第一個是正則表達式,第二個是不符合正則校驗返回的內容
      3.使用鉤子函數,編寫代碼自定義校驗規則
          鉤子函數是在is_valid之后觸發的,在經過前兩個校驗方式之后,合法的數據已經進入到了cleand_data中,鉤子函數就相當于做一個額外的校驗,如果說前兩個校驗是對數據的外表進行校驗的話,那么鉤子函數就是對數據的內在進行校驗
          鉤子函數也分為兩個一個是局部鉤子,一個是全局鉤子
          局部鉤子是每次只校驗一個字段數據,而全局鉤子一次可以校驗多個字段數據
          局部鉤子:
              def clean_username(self):
                  username = self.cleaned_data.get('username')
                  if username == 'jason':
                      self.add_error('username', '用戶名jason已存在')
                  return username  # 局部鉤子返回的是字段數據
          全局鉤子:
              def clean(self):
                  password = self.cleaned_data.get('password')
                  confirm_pwd = self.cleaned_data.get('confirm_pwd')
                  if not password == confirm_pwd:
                      self.add_error('confirm_pwd', '兩次密碼不一致')
                  return self.cleaned_data  # 全局鉤子返回的是cleaned_data
      

      forms組件補充

      min_length       最小字符
      max_length       最大字符
      min_value        最小值
      max_value        最大值
      lable            字段注釋
      error_messages   錯誤提示
      validators       正則校驗器
      initial          默認值
          給字段添加默認值
      required         是否必填
          正常情況下該參數默認為True,如果我們要讓某一個字段變為可不填,則將該字段的required參數改為False
      widget           用來控制標簽的各項屬性
          1.比如說CharField正常情況下默認的是type="text",由于是forms組件渲染的,沒地方修改,因此如果我們想修改type屬性的話就需要用到widget
          具體用法:
              widget=forms.widgets.PasswordInput()  # type屬性改為password
          2.還可以修改標簽樣式
              widget=forms.widgets.PasswordInput(attr={'class': 'form-control', 'username': 'jason'})
       
      跟多可以參考http://www.rzrgm.cn/Dominic-Ji/p/9240365.html
      

      modelform組件

      就是form與model模型層的結合
      from django import forms
      from app01 import models
      
      
      class MyModelForm(forms.ModelForm):
          class Meta:
              model = models.UserInfo  # 選擇對哪張表做數據校驗
              fields = '__all__'  # 表中所有字段都校驗
              labels = {  
                  'username':'用戶名'  
              }  # 字段的名稱
              
      使用:
          def ab_mf_func(request):
              modelform_obj = MyModelForm()
              if request.method == 'POST':
                  modelform_obj = MyModelForm(request.POST,instance=User_obj)
                  if modelform_obj.is_valid():
                      modelform_obj.save()  # 將校驗過的數據保存到數據庫中
                  else:
                      print(modelform_obj.errors)
              return render(request, 'modelFormPage.html', locals())
      

      Django中間件

      中間件主要用于網站訪問頻率的校驗、用戶權限的校驗等全局性的功能需求
      Django中間件默認有七個,同時也支持用戶自定義中間件
      Django默認的七個中間件
          MIDDLEWARE = [
              'django.middleware.security.SecurityMiddleware',
              'django.contrib.sessions.middleware.SessionMiddleware',
              'django.middleware.common.CommonMiddleware',
              # 'django.middleware.csrf.CsrfViewMiddleware',
              'django.contrib.auth.middleware.AuthenticationMiddleware',
              'django.contrib.messages.middleware.MessageMiddleware',
              'django.middleware.clickjacking.XFrameOptionsMiddleware',
          ]
          
      自定義中間件
          1.創建一個存儲自定義中間件代碼的py文件或目錄
          2.參考默認中間件的代碼編寫類并繼承
          3.在類中編寫五個可以自定義的方法
              1.process_request
                  1.請求來的時候會從上往下依次經過每一個注冊過的中間件里面的該方法,如果沒有則跳過
                  2.如果該方法自己返回了一個HttpResponse對象,那么程序不再往后面的中間件走了,而是直接原路返回
              2.process_response
                  1.響應走的時候是從下往上依次經過每一個注冊過的中間件里面的該方法,如果沒有則跳過
                  2.該方法有兩個形參request和reponse,形參response指代的是后端想要返回給前端的數據,該方法必須返回形參,可以替代
              3.process_view
              4.process_exception
              5.process_template_response
          4.自定義的中間件需在配置文件中注冊才能生效
      
      posted on 2023-04-08 21:12  zyg111  閱讀(34)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品国产一区二区三区四区阿崩| 亚洲欧美日韩国产精品专区| 在线无码免费看黄网站| 亚洲色一区二区三区四区| 97久久久精品综合88久久| 好爽好紧好大的免费视频| 精品国产迷系列在线观看| 国产熟女精品一区二区三区| 大地资源免费视频观看| 精品av无码国产一区二区| 亚洲中少妇久久中文字幕| 成人资源网亚洲精品在线| 日本三级香港三级人妇99| 一本色道婷婷久久欧美| 久久精品色妇熟妇丰满人| 把腿张开ji巴cao死你h| 国产a在亚洲线播放| 亚洲日本欧洲二区精品| 九月婷婷人人澡人人添人人爽 | 天天躁日日躁狠狠躁中文字幕| 国产亚洲欧美另类一区二区| 临朐县| 成人精品色一区二区三区| 日本一区二区三区专线| 国产成人综合在线观看不卡| 粉嫩av一区二区三区蜜臀| 亚洲高清WWW色好看美女| 奉新县| 日本深夜福利在线观看| 国产拍拍拍无码视频免费| 国产丰满乱子伦无码专区| 少妇伦子伦精品无吗| 亚洲中文字幕日产无码成人片| 亚洲另类激情专区小说婷婷久| 亚洲老熟女乱女一区二区| 国产精品中文字幕一区| 2021国产精品一卡2卡三卡4卡| 亚欧洲乱码视频一二三区| 国产成人高清精品亚洲| 无套内谢少妇高清毛片| 国产免费高清69式视频在线观看|