• django-form表单


    1,新建一个form.py文件,新建数据结构

    Snipaste_2019-06-18_16-47-18

    2对视图模块做修改,

    • 在顶部要导入我们写的forms模块:from . import forms

    • 对于非POST方法发送数据时,比如GET方法请求页面,返回空的表单,让用户可以填入数据;

    • 对于POST方法,接收表单数据,并验证;

    • 使用表单类自带的is_valid()方法一步完成数据验证工作;

    • 验证成功后可以从表单对象的cleaned_data数据字典中获取表单的具体值;

    • 如果验证不通过,则返回一个包含先前数据的表单给前端页面,方便用户修改。也就是说,它会帮你保留先前填写的数据内容,而不是返回一个空表!

      3,修改html文件

      Snipaste_2019-06-19_15-14-49
      {{ login_form }}就直接完成了表单内容的生成工作!login_form这个名称来自你在视图函数中生成的form实例的变量名!

    • 但是,它不会生成

      ...
      标签,这个要自己写;

    • 使用POST的方法时,必须添加{% csrf_token %}标签,用于处理csrf安全机制;

    • Django自动为每个input元素设置了一个id名称,对应label的for参数

    • 注册链接和登录按钮需要自己写,Django不会帮你生成!
      Django的form表单功能,自动生成了下面部分的代码:

      <tr><th><label for="id_password">密码:</label></th><td><input type="password" name="password" maxlength="256" required id="id_password"></td></tr> 
      <tr><th><label for="id_username">用户名:</label></th><td><input type="text" name="username" maxlength="128" required id="id_username"></td></tr>   
    

    但是这种生成的但没有渲染效果不好看,如下

    Snipaste_2019-06-19_15-49-04

    4、手动渲染表单字段

    可以通过{{ login_form.name_of_field }}获取每一个字段,然后分别渲染,如下例所示:

    <div class="form-group">
      {{ login_form.username.label_tag }}
      {{ login_form.username}}
    </div>
    <div class="form-group">
      {{ login_form.password.label_tag }}
      {{ login_form.password }}
    </div>
    

    这样Bootstrap4不会生效!仔细查看最终生成的页面源码,你会发现,input元素里少了form-control的class,以及placeholder和autofocus,

    在form类里添加attr属性即可,如下所示修改login/forms.py

    from django import forms
    
    
    class UserForm(forms.Form):
        username = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': "Username",'autofocus': ''}))
        password = forms.CharField(label="密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control','placeholder': "Password"}))
    
  • 相关阅读:
    Raspberrypi安装使用开发简要说明
    android UI之Shape详解_GradientDrawable
    智能电视前传——盒子
    Winform不用窗体之间传值
    uva 10706 Number Sequence(数学规律)
    动态规划——矩阵链相乘
    SQL Server 锁
    Azure 配置高可用的准备系列工作-建立不同区域的存储账户和建立网络!
    仿小米简约Calculator
    CentOS 中使用yum出现的“UnicodeDecodeError: &#39;ascii&#39; codec”问题解决方法
  • 原文地址:https://www.cnblogs.com/mrwuzs/p/11056932.html
Copyright © 2020-2023  润新知