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_* 系列的操作是什么意思