模型表单基础

1、模型表单定义

        forms.py

from django import forms


class NameForm(forms.Form):
    your_name = forms.CharField(label='请输入你的名字', max_length=10)

        view.py

from django.http import HttpResponse
from django.shortcuts import render

from the_12.Myforms import NameForm


# Create your views here.


def Hello(request):
    form = NameForm()
    return render(request,'the_12/myform.html',{'forme': form})

        myform.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>这是表单页面</h1>
    {{ forme }}
</body>
</html>

渲染表单到模板

{{ form }}  {{ form as_table }}  {{ form as_p }}  {{ form as_ul }}  {{ form attr }}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>这是表单页面</h1>
{#    渲染#}
{#    {{ forme }}#}
    {{ forme.as_ul}}
</body>
</html>

自定义表单名

{#    自定义保单名#}
    账户名:{{ forme.your_name }}
2、表单提交
    <form>
    账户名:{{ forme.your_name }}
    <input type="submit" value="确定">
    </form>
3、表单验证

        1、get 请求 —— 拿到网页,展示页面

        2、post 请求 —— 提交数据给后台,需要声明请求的 url 

urls.py

from django.urls import path
from .views import Hello

urlpatterns = [
    path('Hello/', Hello, name='hello_form'),
]

myform.html

{#    action 提交到哪里 method 以什么方式提交#}
    <form action="{% url 'hello_form' %}" method="post">
        账户名:{{ forme.your_name }}
        <input type="submit" value="确定">
    </form>

views.py

from django.http import HttpResponse
from django.shortcuts import render

from the_12.Myforms import NameForm


# Create your views here.
def Hello(request):
    form = NameForm()
    print(form.is_bound)  # 查看是否绑定状态
    return render(request,'the_12/myform.html',{'forme': form})

代码优化

        views.py

from django.http import HttpResponse
from django.shortcuts import render
from django.views import View

from the_12.Myforms import NameForm


# Create your views here.
# def Hello(request):
#     form = NameForm()
#     print(form.is_bound)  # 查看是否绑定状态
#     return render(request,'the_12/myform.html',{'forme': form})


class Hello_from(View):
    def get(self, request):
        form = NameForm()
        return render(request, 'the_12/myform.html', {'forme': form})

    def posst(self, request):
        form = NameForm(request.POST)
        return render(request, 'the_12/myform.html', {'forme': form, 'post': True})

urls.py

from django.urls import path
from .views import Hello_from

urlpatterns = [
    path('Hello/', Hello_from.as_view(), name='hello_form'),
]

myform.html

{#    action 提交到哪里 method 以什么方式提交#}
    <form action="{% url 'hello_form' %}" method="post">
        账户名:{{ forme.your_name }}
        <input type="submit" value="确定">
    </form>
{#    判断是否post请求#}
    {% if post %}
        <div>这是post返回的内容</div>
    {% endif %}
</body>

 单个字段校验

基于  cleaned_data 的类方法 clean_<fieldname>()

myforms.py

from django import forms


# 表单定义
class NameForm(forms.Form):
    your_name = forms.CharField(label='请输入你的名字', max_length=10)

    def clean_your_name(self):
        yourname = self.cleaned_data['your_name']
        if yourname.startswith('fuck'):  # 不能出现敏感字符(fuck)
            raise forms.ValidationError('敏感字符,请重新输入')  # 不通过就直接抛出错误
        return yourname

views.py

from django.http import HttpResponse
from django.shortcuts import render
from django.views import View

from the_12.Myforms import NameForm

class Hello_from(View):
    def get(self, request):
        form = NameForm()
        return render(request, 'the_12/myform.html', {'forme': form})

    def post(self, request):
        form = NameForm(request.POST)
        # form.date date 属于原始数据,没有经过验证
        if form.is_valid(): # 是否校验
            print(form.cleaned_data)  # 校验之后的数据
        else:
            print(form.errors)
        return render(request, 'the_12/myform.html', {'forme': form, 'post': True})

效果

 多字段校验

myforms.py

from django import forms


# 表单定义
class NameForm(forms.Form):
    your_name = forms.CharField(label='请输入你的名字', max_length=10)
    your_title = forms.CharField(label='请输入你的头衔')

    def clean_your_name(self):
        yourname = self.cleaned_data.get('your_name','')
        if yourname.startswith('fuck'):  # 不能出现敏感字符(fuck)
            raise forms.ValidationError('敏感字符,请重新输入')  # 不通过就直接抛出错误
        return yourname

    """
    name 以 hk 开头,title 必须使用 金牌讲师
    """

    def clean(self):
        name = self.cleaned_data.get('your_name','')
        title = self.cleaned_data['your_title']
        if name.startswith('hk') and title != '金牌讲师':
            raise forms.ValidationError('name 以 hk 开头,title 必须使用 金牌讲师')

myform.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>这是表单页面</h1>
{#    渲染#}
{#    {{ forme }}#}
{#    {{ forme.as_ul}}#}
{#    自定义保单名#}
{#    账户名:{{ forme.your_name }}#}

{#    action 提交到哪里 method 以什么方式提交#}
    <form action="{% url 'hello_form' %}" method="post">
        账户名:{{ forme.your_name }}<br>
        头衔:{{ forme.your_title }}<br>
        <input type="submit" value="确定">
    </form>
{#    判断是否post请求#}
    {% if post %}
        <div>这是post返回的内容</div>
    {% endif %}
</body>
</html>
4、字段校验

max_length=10 最大长度最小长度 validators=[MinLengthValidator(3,'长度不能小于3')

from django import forms
from django.core.validators import MinLengthValidator


# 表单定义
class NameForm(forms.Form):
    your_name = forms.CharField(label='请输入你的名字',
                                max_length=10,
                                validators=[MinLengthValidator(3,'长度不能小于3')])

自定义

from django import forms
from django.core.validators import MinLengthValidator

# 自定义
def my_validator(value):
    if len(value) < 4:
        raise forms.ValidationError('输入字段不能小于4')


# 表单定义
class NameForm(forms.Form):
    your_name = forms.CharField(label='请输入你的名字',
                                max_length=10,
                                # validators=[MinLengthValidator(3,'长度不能小于3')])
                                validators=[my_validator])
    your_title = forms.CharField(label='请输入你的头衔')

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值