Django之forms组件(Python)

#前言:

在此篇博客之前我已经写了八篇关于Django其它知识的博客,感兴趣的可以在主页查看学习与交流。此篇博客我会讲解在Django中关于forms组件的一些操作,如若各位大佬发现错误或者需要添加的内容,欢迎各位指正,最后我后续还会继续更新关于Django的一些基本内容,欢迎大家关注。

注意:为了更好的理解组件中各个语句的意义,我将多数内容附加在代码的注释当中,这将帮助更好的理解代码含义。

一、Forms介绍:

在前端和 Django 中,表单(Forms)是用来收集和提交用户数据的重要工具。虽然前端和 Django 中的表单都有相似的目的,但它们在实现方式和用法上略有不同。

1、在前端中:

首先得清楚,表单就是用来提交数据的。

在from中,action="提交地址",method=""  表示提交形式。

最为重要的就是:表单控件:

1.输入类:

input text表示文本 ,number数字输入类 ,password表示输入密码(输入密码时候不能在屏幕中显示出) ,name="key"提取数据(value) 没有name就无法提交输入的参数 也可以直接设置value值 就不用输入东西。

placeholder表示未输入时候的 提示内容。

disabled 禁止选中(不能输入了)。

2.选择类:

type="radio"  radio表示单选框要单选的话name必须一样 value表示的是选中这个选项的值.type="checkbox" 表示多选 checked表示默认选中.

3.下拉选择:

select里面 要选择的数据用option。

4.文本域:

就相当于一个文本输入框  textarea。

2.在Django中:

forms组件:通过后端在 Django 中定义类对象方式,在 HTML 页面中动态实现一个表单;在后端中检验用户提交的数据。

二、Forms在Django中的应用:

在 Django 中,表单通常定义在 forms.py 文件中,通过继承 django.forms.Formdjango.forms.ModelForm 类来创建。表单类中的每个字段都是一个表单字段对象,它们定义了表单中的输入字段类型以及验证规则等。

1、动态 forms 表单:

创建简单表单:

# 导入 forms 组件
from django import forms

# 自定义 forms 表单类 , 表单类必须继承 forms.Form
# Django 提供 forms 组件中么有按钮标签
class MyForm(forms.Form):
    # 表单中的文本框标签,定义为属性
    # 定义好之后 , 渲染到 html 页面中是一个 label 标签和 input 标签
    username = forms.CharField(label='用户名')
    password = forms.CharField(label='密码')
def show_forms(request):
    # 渲染表单,生成一个表单类对象 , 将这个对象传递到 html 页面中
    my_forms = MyForm()
    return render(request , 'forms_django.html' , locals())
<body>
<form method="post">
    {% csrf_token %}
    {{ my_forms }}
    <input type="submit" value="登录">
</form>
</body>

具体操作细节上述代码中都有注释。

上述三块代码分别是在forms.py文件,view.py文件,html文件中的。

注意:

1.在Django中没有forms组件的按钮标签。

2.上述是以post请求为例子,注意设置命令’{% csrf_token %}‘。

2、在模板中渲染自定义的表单类:

1.使用表格渲染:

<form method="post">
    {% csrf_token %}
    <p>使用表格的样式渲染</p>
    {{ my_forms.as_table }}
    <input type="submit" value="登录">
</form>

2.使用段落渲染:

<form method="post">
    {% csrf_token %}
    <p>使用段落的样式渲染</p>
    {{ my_forms.as_p }}
    <input type="submit" value="登录">
</form>

3.使用列表渲染:

<form method="post">
    {% csrf_token %}
    <p>使用列表的样式渲染</p>
    {{ my_forms.as_ul }}
    <input type="submit" value="登录">
</form>

4.自定义渲染:

<form method="post">
    {% csrf_token %}
    <p>自定义渲染</p>
    {{ my_forms.username.label }}:{{ my_forms.username }}<br>
    {{ my_forms.password.label }}:{{ my_forms.password }}<br>
    <input type="submit" value="登录">
</form>

3、forms 组件提供的文本框设置:

注意:下述代码除了普通的文本框之外邮箱需要特别注意,因为邮箱它会自动识别格式。日期它会将文本框变为选择时间的。

# 导入 forms 组件
from django import forms

# 自定义 forms 表单类 , 表单类必须继承 forms.Form
# Django 提供 forms 组件中么有按钮标签
class MyForm(forms.Form):
    # 表单中的文本框标签,定义为属性
    # 定义好之后 , 渲染到 html 页面中是一个 label 标签和 input 标签
    username = forms.CharField(label='用户名')
    password = forms.CharField(label='密码',
                               # 设置 password 文本框,这样密码就不显示出来了
                               widget=forms.PasswordInput())
    # 邮箱
    email = forms.EmailField(label="邮箱")
    # 日期
    day = forms.DateField(label='日期',
                          # 设置日期日历选项
                          widget=forms.TextInput(attrs={'type':'date'}))
    # 选项框
    # choices 设置选项内容,内容要以元组类型
    gender = forms.ChoiceField(choices=((1 , '男'),(2 , '女'),(3 , '未知')) , label='性别',
                               # 设置选项框类型: 单选 RadioSelect
                               widget=forms.RadioSelect(),
                               # 设置默认选项
                               initial=3)
    work = forms.ChoiceField(choices=((1 , '搬砖'),(2 , '退休'),(3 , '学生')) , label='职业',
                               # 设置选项框类型: 单选 Select
                               widget=forms.Select(),
                               # 设置默认选项
                               initial=2)
    subject = forms.MultipleChoiceField(choices=((1 , 'python'),(2 , 'java'),(3 , 'C'),
                                                 (4 , 'C#'),(5 , 'linux'),(6 , '大数据')) ,
                                label='科目',
                               # 设置选项框类型: 多选 CheckboxSelectMultiple
                               widget=forms.CheckboxSelectMultiple(),
                               # 设置默认选项
                               initial=[1, 2 , 6])
    hobby = forms.ChoiceField(choices=((1 , '爬山'),(2 , '旅游'),(3 , '徒步'),
                                      (4 , '唱歌'),(5 , '篮球'),(6 , '跆拳道')) ,
                                label='爱好',
                               # 设置选项框类型: 多选 CheckboxSelectMultiple
                               widget=forms.CheckboxSelectMultiple(),
                               # 设置默认选项
                               initial=[1, 2 , 6])
    xy = forms.CharField(label='为了你好的协议' , widget=forms.CheckboxInput())

4、forms 验证数据:

使用 forms 组件进行校验用户表单提交的数据。

# 数据验证
class RegisterForm(forms.Form):
    username = forms.CharField(max_length=15 , min_length=3,
                               # 设置错误信息字典
                               error_messages={
                                   "max_length" : "用户名长度超出",
                                   "min_length" : "用户名长度过短",
                                   "required" : "不允许为空"
                               })
    password = forms.CharField(max_length=15 , min_length=6,
                               # 设置错误信息字典
                               error_messages={
                                   "max_length" : "密码长度超出",
                                   "min_length" : "密码长度过短",
                                   "required" : "不允许为空"
                               })
    password2 = forms.CharField(max_length=15 , min_length=6,
                               # 设置错误信息字典
                               error_messages={
                                   "max_length" : "密码长度超出",
                                   "min_length" : "密码长度过短",
                                   "required" : "不允许为空"
                               })

上述的代码中: error_messages它是为了涉及错误字典,就是当出现错误,会显示字典值里面的内容。

此时在视图文件中:

注意:访问html一般都为get请求,我们自己设置的提交表单数据为post请求,如下述代码就能更好的区分。

class RegisterView(View):

    def get(self , request):
        return render(request , 'register.html')

    def post(self , request):
        # 生成一个表单类对象
        # 验证数据,将数据传递给表单类;表单类接收的数据是字典类型的数据
        register_form = RegisterForm(request.POST)

        # 判断数据是否合法
        # is_valid 判断表单类中的数据是否检验合法 , 合法返回 True
        if register_form.is_valid():
            res = "注册成功"
        else:
            res = "注册失败"
        return render(request , 'register.html' , locals())

注意:其中最为主要的一个点就是要以POST请求将我们输入的数据传输到我们自己设计的用来检验的类视图当中,其中'is_valid' 判断表单类中的数据是否检验合法 , 合法返回 True。

三、总结:

该篇博客主要讲解了forms组件在Django的应用,我后续还会继续出关于Django中的其它内容,欢迎大家关注等待后续。如若发现错误和需要补正的地方,欢迎各位大佬前来指正。

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值