django - (五) Form

django - (五) Form

1. 如果自己写一个Form

  1. html

        <form action="/crm/cust_search/" method="get">
            <input type="text" name="cust_id">
            <input type="submit" value="Search">
        </form>
    
  2. urls

        url(r'^cust_list/$',cust_list),
        url(r'^cust_search/$',cust_search),
    
  3. models

    def cust_list(request):
        return render(request,'cust_list.html')
    
    def cust_search(request):
        if "cust_id" in request.GET:
            message="You search for :%r" % request.GET['cust_id']
        else:
            message="You submitted an empty form"
        return HttpResponse(message)
    

2. 使用Django-From提交表单

  1. 新建文件(student_sys/student/forms.py)

    from django import forms
    from .models import Student
    
    class StudentForm(forms.Form):
        name = forms.CharField(label='姓名',max_length=128)
        sex = forms.ChoiceField(label='性别',choices=Student.SEX_ITEMS)
        profession = forms.CharField(label='职业',max_length=128)
        email = forms.EmailField(label='邮箱',max_length=128)
        qq = forms.CharField(label='QQ',max_length=128)
        phone = forms.CharField(label='手机',max_length=128)
    
  2. html

        <form action="/" method="post">
            {% csrf_token %}
            {{ form }}
            <input type="submit" value="Submit"/>
        </form>
    

这里as_table可以自动将Form中的所有元素放到页面前台上

  1. views

    from django.shortcuts import render
    from django.http import HttpResponseRedirect
    from django.urls import reverse
    # Create your views here.
    
    from .forms import StudentForm
    from .models import Student
    
    def index(request):
        # 获取student内存的所有对象
        students = Student.objects.all()
        if request.method=='POST':
            form = StudentForm(request.POST)
            if form.is_valid():
                cleaned_data = form.cleaned_data
                student = Student()
                student.name = cleaned_data['name']
                student.sex = cleaned_data['sex']
                student.email = cleaned_data['email']
                student.profession = cleaned_data['profession']
                student.qq = cleaned_data['qq']
                student.phone = cleaned_data['phone']
                student.save()
                return HttpResponseRedirect(reverse('index'))
        else:
            form = StudentForm()
    
        context = {
            'students':students,
            'form':form,
        }
        # 使用render渲染index.html
        return render(request,'student/index.html',context=context)
    

3. 简化Django-From表单

  1. 新建文件(student_sys/student/forms.py)

    from django import forms
    from .models import Student
    
    class StudentForm(forms.ModelForm):#注意这里继承的类变化
        class Meta:
            model = Student
            fields = (
                'name','sex','profession',
                'email','qq','phone',
            )
        ```
    
    
  2. html

        <form action="/" method="post">
            {% csrf_token %}
            {{ form }}
            <input type="submit" value="Submit"/>
        </form>
    
  3. views

    from django.shortcuts import render
    from django.http import HttpResponseRedirect
    from django.urls import reverse
    # Create your views here.
    
    from .forms import StudentForm
    from .models import Student
    
    def index(request):
        # 获取student内存的所有对象
        students = Student.objects.all()
        if request.method=='POST':
            form = StudentForm(request.POST)
            if form.is_valid():
                #!!!这里可以删除字段一一对应的关系配置
                student.save()
                return HttpResponseRedirect(reverse('index'))
        else:
            form = StudentForm()
    
        context = {
            'students':students,
            'form':form,
        }
        # 使用render渲染index.html
        return render(request,'student/index.html',context=context)
    
        ```
    

4. 添加字段的验证

  1. Froms修改(student_sys/student/forms.py-在3.1函数StudentForm类中新增以下内容)
    def clean_qq(self):
        cleaned_data = self.cleaned_data['qq']
        if not cleaned_data.isdigit():
            raise forms.ValidationError('写数字咯!')
        return int(cleaned_data)
    
  2. 打开浏览器,填个错误的QQ号就能看到变化
    在这里插入图片描述

5. 自定义样式的添加

  1. views

    这里views 不用修改,仍然只需传入form对象即可

  2. html

     <style type="text/css">
            ul.errorlist {
            margin: 0;
            padding: 0;
            }
            .errorlist li {
            background-color: red;
            color: white;
            display: block;
            font-size: 10px;
            margin: 0 0 3px;
            padding: 4px 5px;
            }
            </style>
    
        <form action="" method="post">
            <div class="field">
                {{ form.cust_id.errors }}<br>
                {{ form.cust_id.label }}:
                {{ form.cust_id }}
            </div>
            <input type="submit" value="Submit">
        </form>
    

    这里只示范了一个form元素的存放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值