zoukankan      html  css  js  c++  java
  • 通过Django中的forms类对前台的forms表单数据进行校验

    1.前端form表单模板代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Login</title>
    </head>
    <body>
        <form action="/login/" method="post">
            {% csrf_token %}
            {{obj.user}}<span>{{obj.errors.user.0}}</span>
            <br>
            {{obj.email}}<span>{{obj.errors.email.0}}</span>
            <br>
            <span>密码</span><input type="text" name="password">
            <br>
            <input type="submit">
        </form>
    </body>
    </html>
    

    2.后台数据Python代码对前端的form表单数据进行校验

     1 from django.shortcuts import render, HttpResponse, redirect
     2 from django import forms
     3 
     4 # Create your views here.
     5 class Login(forms.Form):
     6     user = forms.CharField(min_length=6, error_messages={'required': '用户名不能为空', 'min_length': '用户名不能小于6位'})
     7     email = forms.EmailField(error_messages={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'})
     8   #此处未定义password,会导致下面的Login对象在接收前台数据时,只接收user数据和password数据
     9 
    10 def login(request):
    11     if request.method == 'GET':
    12         obj = Login()
    13         return render(request, 'login.html', {'obj': obj})
    14     else:
    15         obj = Login(request.POST)
    16         if obj.is_valid():#is_valid()用于判断obj对象是否校验通过,校验通过传回true
    17             value_list = obj.clean()#clean()用于获取obj中已校验通过的数据
    18             print(value_list)
    19             #create(**value_list)#可直接将获取到的对象的值通过该方式插入到数据库中
    20         else:
    21             #error_obj = obj.errors.as_json()#获取校验失败的信息
    22        error_obj = obj.errors #获取错误对象
    23        print(error_obj['user'][0])#获取user中文错误信息
    24        print(error_obj['email'][0])#获取email中文错误信息
    25             #print(error_obj)
    26           return render(request, 'login.html', {'obj': obj})

     3.通过django生成前端form表单时,可以通过widget自定义input输入框的类型,并给它赋予前端属性

     1 from django import forms
     2 from django.forms import fields
     3 from django.forms import widgets
     4 
     5 class LoginForm(forms.Form):
     6     user = fields.CharField(widget=widgets.TextInput(attrs={'class': 'hid', 'placeholder': '用户名'}))
     7     #CharField的默认类型为TextInput,此处加上只是为了给当前input输入框增加属性attrs={'class': 'hid', 'placeholder': '用户名'}
     8     password = fields.CharField(widget=widgets.PasswordInput(attrs={'class': 'hid', 'placeholder': '密码'}))
     9     #CharField的默认类型为TextInput,加上widget=widgets.PasswordInput后变成password类型输入框
    10     select = fields.ChoiceField(choices=[(1, 'SH'), (2, 'BJ'), ])
    11     #利用choices=[(1, 'SH'), (2, 'BJ'), ]给前端下拉列表增加可选值

     4.通过models中的class类生成对应的form表单

    1 from django import forms
    2 from app01 import models #导入表模型类
    3 class UserInfoModelForm(forms.ModelForm):
    4     class Meta:
    5         model = models.Test #test为models中的一个类
    6         #fields = ('username',)
    7         fields = '__all__'

      

  • 相关阅读:
    Android应用开发笔记——打造自己的标签栏
    ZeroMQ 的模式[转]
    安装python/wingware
    新手该如何学python怎么学好python?
    membase 简介
    前端学习网站推荐
    签了工作之后才发现,自己太草率了.....我看过的关于职业规划最好最全面的一篇文章[转]
    Nagio监控系统介绍
    thread_union位置
    音频采样位数问题
  • 原文地址:https://www.cnblogs.com/Goongo/p/9097396.html
Copyright © 2011-2022 走看看