• django 表单操作


    django带有一个form库,django.forms。将要处理的HTML的<Form>定义一个form类,放到一个文件中:forms.py文件中。

    from django import forms
    
    class Login(forms.Form):
            username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'请输入用户名'}))
            email = forms.EmailField()
            ip = forms.GenericIPAddressField(error_messages={'required':('IP不能为空'),'invalid':('格式错误')})

    每一个字段默认都是必填,要使email成为可选项,需要指定required=False;forms把每个字段的显示逻辑都分离到一部组件(widget)中,可以使用widget=forms.Textarea替换掉默认组件。message = forms.CharField(widget=forms.Textarea)

    在视图中使用Form对象

    from app04 import forms
    import json
    
    def index(request):
        ret = {'data':None,'error':''}
        obj = forms.Login()
        ret['data']=obj
        if request.method == 'POST':
            checkForm = forms.Login(request.POST)       #绑定数据到表单
            checkresult = checkForm.is_valid()
            if checkresult:
                print(checkForm.cleaned_data)
           print(checkForm.cleaned_data['username'])
    else: errorsObj = checkForm.errors
    #       firstErrorMsg = checkForm.errors.as_data() firstErrorMsg
    = checkForm.errors.as_json() ErrorMsg = json.loads(firstErrorMsg).values() EndMsg = list(ErrorMsg)[0][0]['message'] ret['error'] = EndMsg ret['data'] = checkForm #出现错误后,不会清空原来的输入 return render_to_response('login_form.html',ret) return render_to_response('login_form.html',ret)

    对于绑定的表单可以使用

      is_valid() 方法来执行验证并返回一个表示数据是否合法的布尔值

      cleaned_data 包含表单中定义的合法字段

      errors属性可以获得错误信息的一个字典,这个我暂时没有测试出来,有点问题。

      as_data()方法返回一个字典,它映射字段到原始的ValidationError实例,当输入错误的IP格式时,

        {'ip': [ValidationError(['格式错误'])]}

      as_json()返回JSON序列化后的错误,当输入错误的IP格式时返回

        {"ip": [{"message": "u683cu5f0fu9519u8bef", "code": "invalid"}]}

    login_form.html中:

    <form action="/app04/index/" method="POST">
                    用户名:{{ data.username }}
                    邮箱:{{ data.email }}
                    IP: {{data.ip}}
    
            <!--    {{ form.as_table }}    -->
                    <input type="submit" value="提交">
                    <div>
                            {{ error }}
                    </div>
    </form>
    

      表单渲染选项

      {{ form.as_table }}以表格的形式将它们渲染在<tr>标签中

      {{ form.as_p }}以表格的形式将它们渲染在<p>标签中

      {{ form.as_ul }}以表格的形式将它们渲染在<li>标签中

      需要自己提供<table>或<ul>元素

    效果

  • 相关阅读:
    Thymeleaf基本知识
    Hibernate学习总结
    oracle学习笔记第三天
    oracle学习笔记第二天
    oracle学习笔记第一天
    Cloudera Hadoop 环境搭建(离线安装)
    SpringBoot搭建基于Apache Shiro+Redis的分布式Session共享功能
    SpringBoot搭建基于Apache Shiro的权限管理功能
    Mybatis基于SqlSession实现CRUD
    Mybatis基于接口注解配置SQL映射器(二)
  • 原文地址:https://www.cnblogs.com/homle/p/8620791.html
Copyright © 2020-2023  润新知