Django 中form的用法

form的主要作用:1.在html中生成表单框架,2.验证数据(实话实说,很简洁,但不实用,灵活性差)

from django.db import models

# Create your models here.

class UserInfo(models.Model):
    name = models.CharField(max_length=32,verbose_name='用户名')
    email = models.EmailField(max_length=32,verbose_name='邮箱',default='123@live.com')
    pwd = models.CharField(max_length=32,verbose_name='密码',default='123')
    ut = models.ForeignKey(to='UserType',default=1,verbose_name='用户类型',on_delete=models.CASCADE)
    def __str__(self):
        return self.name

class Role(models.Model):
    title = models.CharField(max_length=32,verbose_name='用户角色')
    users = models.ForeignKey(to='UserInfo',verbose_name='用户职位',on_delete=models.CASCADE)

    def __str__(self):
        return self.title


class UserType(models.Model):
    title = models.CharField(max_length=32,verbose_name='用户类型')

    def __str__(self):
        return self.title

2. 在model目录下新建forms.py

有两种写法:
a. 定义表单模型
from django import  forms
class UserInfoForm(forms.Form):
    ame = forms.CharField(max_length=100, label='用户名')
    email = forms.EmailField(label='电子邮件')
    pwd = forms.CharField(label='密码', widget=forms.Textarea)

b. 继承model

from django.forms import ModelForm
from myblog.users.models import Users

class TestModeForm(ModelForm):
    class Meta:
        model = UserInfo
        fields = "__all__"    # 或者fields = ('name','pwd','email')
3.在view视图中 ,做表单验证
def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['uname']
            pwd = form.cleaned_data['pwd']
            email = form.cleaned_data['email']return HttpResponseRedirect('/index/')
    else:
        return render_to_response('contact.html', {'form': form, })

4. 在html页面,代码超简单,这点django做的不错

<form id="your-profile" action="/contact" method="post">
    <table class="form-table">
        <!--{{ form.as_ul }}-->                            # 这是第一种写法,在
        <ul> 显示表单
            <!-- {{ form.as_p }}-->                            # 这是第二种写法,在<p> 显示表单
                <!--{{ form.as_table }}-->                     # 这是第三种写法,在
            <table>显示表单
                {% for field in form %}                          # 这是第四种写法,以循环形式显示表单
                    {{ field.label_tag }}:{{ field }}
                    {{ field.errors }}
                {% endfor %}
            </table>
            <p class="submit"><input type="submit" name="submit" id="submit" class="button-primary" value="注册信息"/></p>
</form>

# 注意是记录一下form.as_* 系列的操作是什么意思

原文地址:https://www.cnblogs.com/supery007/p/8650832.html