Django表单提交一共有三种方式:
1.不使用Django组件进行提交
2.使用django.forms.Form(所有表单类的父类)进行提交
3.使用django.forms.ModelForm(可以和模型绑定的Form)进行提交
这里的例子是,给Publisher这个表里添加数据,表结构如下:
class Publisher(models.Model): name = models.CharField("名称",max_length=30) address = models.CharField("地址", max_length=50) city = models.CharField("城市", max_length=60) state_province = models.CharField("省份", max_length=30) country = models.CharField("国家", max_length=50) website = models.URLField("网址") class Meta: verbose_name = ‘出版商‘ verbose_name_plural = verbose_name def __str__(self): return self.name
urls.py里加入如下配置:
url(r‘^add_publisher/$‘, views.add_publisher, name=‘add_publisher‘),
一下代码着重介绍模版文件的编写和views.py文件的编写
html文件:\hello_django\hello\templates\add_publisher.html
views.py文件:\hello_django\hello\views.py
1.不使用Django组件进行提交
和普通的html提交没什么不同,后台views.py使用命令一个一个的接収参数,然后进行处理,需要自己进行数据校验,自己进行组装数据
html文件:自己写form表单
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>添加出版社信息</title></head><body><form action="{% url ‘add_publisher‘ %}" method="post"> {% csrf_token %} 名称:<input name="name" type="text" /><br> 地址:<input name="address" type="text" /><br> 城市:<input name="city" type="text" /><br> 省份:<input name="state_province" type="text" /><br> 国家:<input name="country" type="text" /><br> 网址:<input name="website" type="text" /><br> <input type="submit" value="提交"><br></form></body></html>
views.py(自己接受数据,自己组装数据)
def add_publisher(request): if request.method == "POST": name = request.POST[‘name‘] address = request.POST.get(‘address‘) city = request.POST[‘city‘] state_province = request.POST[‘state_province‘] country = request.POST[‘country‘] website = request.POST[‘website‘] Publisher.objects.create( name = name, address = address, city = city, state_province = state_province, country = country, website = website, ) return HttpResponse("添加出版社信息成功!") else: return render(request, ‘add_publisher.html‘, locals())
2.使用django.forms.Form(所有表单类的父类)进行提交
新建\hello_django\hello\forms.py文件,参数是forms.Form标识他是一个Form的子类
from django import forms class PublisherForm(forms.Form): name = forms.CharField(label="名称", error_messages={"required": "必填"}) address = forms.CharField(label="地址", error_messages={"required": "必填"}) city = forms.CharField(label="城市", error_messages={"required": "必填"}) state_province = forms.CharField(label="省份", error_messages={"required": "必填"}) country = forms.CharField(label="国家", error_messages={"required": "必填"}) website = forms.URLField(label="网址", error_messages={"required": "必填"})
html文件:这样不用自己写表单了
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>添加出版社信息</title></head><body><form action="{% url ‘add_publisher‘ %}" method="post"> {% csrf_token %} {{ publisher_form.as_p }} <input type="submit" value="提交"><br></form></body></html>
views.py文件:不用一个一个接受参数,也不用自己做参数校验了
def add_publisher(request): if request.method == "POST": publisher_form = PublisherForm(request.POST) if publisher_form.is_valid(): Publisher.objects.create( name = publisher_form.cleaned_data[‘name‘], address = publisher_form.cleaned_data[‘address‘], city = publisher_form.cleaned_data[‘city‘], state_province = publisher_form.cleaned_data[‘state_province‘], country = publisher_form.cleaned_data[‘country‘], website = publisher_form.cleaned_data[‘website‘], ) return HttpResponse("添加出版社信息成功!") else: publisher_form = PublisherForm() return render(request, ‘add_publisher.html‘, locals())
3.使用django.forms.ModelForm(可以和模型绑定的Form)进行提交
新建\hello_django\hello\forms.py文件,参数是forms.ModelForm标识他是一个ModelForm的子类
from django import forms from hello.models import Publisher class PublisherForm(forms.ModelForm): class Meta: model = Publisher exclude = ("id",) views.py文件:不用一个一个接受参数,也不用自己做参数校验了,也不同自己创建对象
def add_publisher(request): if request.method == "POST": publisher_form = PublisherForm(request.POST) if publisher_form.is_valid(): publisher_form.save() return HttpResponse("添加出版社信息成功!") else: publisher_form = PublisherForm() return render(request, ‘add_publisher.html‘, locals())
时间: 2024-10-15 14:37:07