真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中如何使用djangoform表單驗證的方法-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)Python中如何使用django form表單驗證的方法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、富川ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學管理、有技術(shù)的富川網(wǎng)站制作公司

python有哪些常用庫

python常用的庫:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。

一. django form表單驗證引入 

有時時候我們需要使用get,post,put等方式在前臺HTML頁面提交一些數(shù)據(jù)到后臺處理例 ;




  
  Form


  
    {% csrf_token %}                             

前端提交后臺獲?。?/p>

from django.shortcuts import render,HttpResponse,redirect
from app01 import models
def Login(request):
  if request.method == "POST":
    username = request.POST.get("username")
    password = request.POST.get("password")
    return HttpResponse("Hello,%s"%(username))

這樣就完成了基本的功能,基本上可以用了。

但是,如果用戶輸入并未按照要求(比如手機號要輸數(shù)據(jù)11位長度,密碼的復(fù)雜度等),還有就是提交后再回來已經(jīng)輸入的數(shù)據(jù)也會沒了

當然如果我們手動將輸入之后的數(shù)據(jù)在 views 中都獲取到再傳遞到網(wǎng)頁,這樣是可行的,但是很不方便,所以 Django 提供了更簡單易用的 forms 來解決驗證等這一系列的問題

,在這里不得不提Django的插件庫真的很強大,簡單易擴展,上面的內(nèi)容只是引進為什么要使用form,下面著重記錄django form的使用

二.form表單驗證應(yīng)用

需要在django的APP中新建一個模塊form.py,具體內(nèi)容如下

class RegisterForm(forms.Form):
  email = forms.EmailField(required=True,
               error_messages={'required': "郵箱不能為空"})
  password = forms.CharField(max_length=120,
                min_length=6,
                required=True,
                error_messages={'required': "密碼不能為空"})
  invite_code = forms.CharField(required=True,error_messages={'required': "驗證碼不能為空"})

前端頁面




  
  register


  
                                        

后臺views處理

def register(request):
  if request.method == "POST":
    f = Reg_Form(request.POST)
    if f.is_valid():
      user = f.cleaned_data["username"]
      pwd = f.cleaned_data["password"]
      code = f.cleaned_data["code"]
      res_code = request.session.get("code", None)
      result = models.UserInfo.objects.filter(user__exact=user,pwd__exact=pwd)
      if code.upper() == res_code.upper() and result:
        models.UserInfo.objects.filter(user__exact=user).update(status=1)
        request.session["user"] = user
        return redirect("/home")
      else:
        return render(request, "register.html", {"error": f.errors, "form": f})else:return render(request, "register.html")

Reg_Form(request.POST) 使用form類來處理提交的數(shù)據(jù)來驗證數(shù)據(jù)的合法性,is_valid()合法后的邏輯處理,驗證后的數(shù)據(jù)保存在實例化后返回的cleaned_data中,

cleaned_data是個字典的數(shù)據(jù)格式,錯誤信息保存在form.errors中比如說想在views中查看所有報錯信息print(f.errors),如果只想看用戶的可以

print(form.errors['username'][0])

錯誤信息我們可以通過 模板渲染回前端頁面,例


{% csrf_token %}
    
      {#接收后臺傳過來的form對象,自動生成input標簽#}
      {{ form.user }}
      {#從后臺傳過來的error是字典,直接{{ error.user.0 }}呈現(xiàn)錯誤信息#}
       {#如果后臺返回了錯誤信息,將錯誤信息放入span標簽,在頁面顯示,否則不顯示#}
      {% if error.username.0 %}
      {{ error.userusername.0 }}
      {% endif %}
    
           {{ form.password }}       {% if error.pwd.0 %}       {{ error.password .0 }}       {% endif %}     
    
           
  

三.自生成input框

Form類

class RegisterForm(forms.Form):
  style = 'form-control input-lg'
  phone = forms.CharField(widget=forms.TextInput(attrs={'class': style,
                              'name': 'title'})),
              required=True,
              error_messages={'required': ugettext_lazy('*Required')})
  code = forms.CharField(widget=forms.NumberInput(attrs={'placeholder': '驗證碼',
                              'class': style}),
              min_length=4,
              max_length=4,
              required=True,
              error_messages={'required': ugettext_lazy('*Required')})
  password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '請輸入密碼',
                                 'class': style}),
                min_length=6,
                required=True,
                error_messages={'required': ugettext_lazy('*Required')})

views

def register(request):
  if request.method == "POST":
    f = RegisterForm(request.POST)
    if f.is_valid():
      user = f.cleaned_data["username"]
      pwd = f.cleaned_data["password"]
      code = f.cleaned_data["code"]
      res_code = request.session.get("CheckCode", None)
      result = models.UserInfo.objects.filter(user__exact=user,pwd__exact=pwd)
      if code.upper() == res_code.upper() and result:
        models.UserInfo.objects.filter(user__exact=user).update(status=1)
        request.session["user"] = user
        return redirect("/home")
      else:
        return render(request, "login.html", {"error": f.errors, "form": f})
    else:
      return render(request, "login.html", {"error": f.errors, "form": f})
  else:
    # 如果不是post提交數(shù)據(jù),就不傳參數(shù)創(chuàng)建對象,并將對象返回給前臺,直接生成input標簽,內(nèi)容為空
    f = Log_Form()
    return render(request, "login.html", {"form": f})

前端頁面


  
  {% csrf_token %}
    
{#      接收后臺傳過來的form對象,自動生成input標簽#}
      {{ form.user }}
{#      從后臺傳過來的error是字典,直接{{ error.user.0 }}呈現(xiàn)錯誤信息#}
{#      如果后臺返回了錯誤信息,將錯誤信息放入span標簽,在頁面顯示,否則不顯示#}
    
      {{ form.email }}
      {% if error.email.0 %}
      {{ error.email.0 }}
      {% endif %}
    
            {{ form.password }}       {% if error.password.0 %}       {{ error.password.0 }}       {% endif %}                    {{ form.code }}       {% if error.book_type.0 %}       {{ error.code.0 }}       {% endif %}          
           
  

四.Form驗證完善

https://docs.djangoproject.com/en/dev/ref/forms/validation/

form驗證的運行順序是init,clean,validte,save

其中clean和validate會在form.is_valid()方法中被先后調(diào)用

clean等步驟遇到的異常:Exception Value: argument of type 'NoneType' is not iterable.

可能是cleaned_data中某個字段值應(yīng)該是個列表,實際上卻是空值。

clean方法重寫時一定不要忘了return cleaned_data

這樣重寫可以使用戶提交的數(shù)據(jù)在form類中執(zhí)行檢測完后返回數(shù)據(jù)給用戶,數(shù)據(jù)合法后進行邏輯處理,不需要再進行處理返回用戶,更方便更合理

補充:

5.form的四種初始化方式

①實例化oneform(initial={'onefield':value})

②定義字段時給初始化值oneformfield = forms.CharField(initial=value)

③重寫Form類的__init__()方法:self.fields['onefield'].initial = value

④當給form傳參instanse(即oneform(instanse=onemodel_instance))時,前三種初始化方法會全部失效,即使重寫__init__時,先調(diào)用父類的__init__再使用方法③,仍然無效(不是很爽)。

這時想重新初始化字段值只能在__init__()里 self.initial['title'] = value,直接對Form類的initial屬性字典賦值。

from django import forms
class RegisterForm(forms.Form):
  email = forms.EmailField(required=True,
               error_messages={'required': "郵箱不能為空"})
  password = forms.CharField(max_length=120,
                min_length=6,
                required=True,
                error_messages={'required': "密碼不能為空"})
  invite_code = forms.CharField(required=True,error_messages={'required': "驗證碼不能為空"})
  def clean(self):
    # 用戶名
    try:
      email = self.cleaned_data['email']
    except Exception as e:
      raise forms.ValidationError(u"注冊賬號需為郵箱格式")
    # 驗證郵箱
    user = User.objects.filter(username=email)
    if user: # 郵箱已經(jīng)被注冊了
      raise forms.ValidationError(u"郵箱已被注冊")
    # 密碼
    try:
      password = self.cleaned_data['password']
    except Exception as e:
      print('except: ' + str(e))
      raise forms.ValidationError(u"請輸入至少6位密碼")
    return self.cleaned_data

感謝各位的閱讀!關(guān)于“Python中如何使用django form表單驗證的方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


當前題目:Python中如何使用djangoform表單驗證的方法-創(chuàng)新互聯(lián)
本文來源:http://weahome.cn/article/dicoeh.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部