16.Django提交表单
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())
16.Django提交表单的更多相关文章
- Django提交表单时遇到403错误:CSRF verification failed
这个问题是由跨站点伪造请求(CRSF)造成的,要彻底的弄懂这个问题就要理解什么是CRSF,以及Django提供的CSRF防护机制是怎么工作的. 什么是CSRF CSRF, Cross Site Req ...
- Django报错:提交表单报错---RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you have APPEND_SLASH set.
Django报错:提交表单报错---RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and ...
- Django:提交表单报错:RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you have A
Django:提交表单报错:RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you ...
- 4 django系列之HTML通过form标签来同时提交表单内容与上传文件
preface 我们知道提交表单有2种方式,一种直接通过submit页面刷新方法来提交,另一种通过ajax异步局部刷新的方法提交,上回我们说了通过ajax来提交文件到后台,现在说说通过submit来提 ...
- Django:提交表单时遇到403错误:CSRF verification failed
Django:提交表单时遇到403错误:CSRF verification failed 问题: 提交表单时遇到403错误:CSRF verification failed 解决方案: 在表单界面ht ...
- Django ajax方法提交表单,及后端接受数据
前台代码: {% block content %} <div class="wrapper wrapper-content"> <div class=" ...
- 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单
调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模 ...
- Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)
Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点) 一丶Django的静态文件配置 #we ...
- django from表单验证
django from表单验证 实现:表单验证 工程示例: urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from djan ...
随机推荐
- JS-只能输入中文和英文
<span style="font-family:KaiTi_GB2312;">转自:<a target=_blank href="http://www ...
- dlsym
在Android源码中发现,会如下使用: dlsym(RTLD_DEFAULT, name); 也就是说 handle=RTLD_DEFAULT,在网上查了下,大致是说会在当前进程中按照 defaul ...
- java 字符深入知识,待整理
'编',"编", 为什么获取到的字节数组长度不一样 http://www.cnblogs.com/yongdaimi/p/5899328.html Unicode 官网 http ...
- Java种八种常用排序算法
1 直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数……直 ...
- Ansible@一个高效的配置管理工具--Ansible configure management--翻译(五)
无书面许可请勿转载 高级Playbook Extra variables You may have seen in our template example in the previous chapt ...
- 【ExtAspNet学习笔记】ExtAspNet控件库中常见问题
1.在Grid控件中添加CheckBoxField控件,选择一行时,如何获取选择的CheckBoxField所对应记录的唯一标识值? ●解决方案: 在前台Grid控件中, 添加“<ext:Che ...
- SpringCloud系列四:实现Eureka Server的高可用并将应用注册到Eureka Sever集群上
1. 回顾 上一篇博客中,实现了单节点的Eureka Server.Eureka Client会定时连接Eureka Server,获取注册表中的信息并缓存到本地.微服务在消费远程API时总是使用本地 ...
- 第1章列表处理——1.1 Lisp列表
Lisp是啥? Lots of Isolated Silly Parentheses (大量分离的愚蠢的括号) Lisp指的是"LISt Processing"(列表处理),通过把 ...
- 【PHP】富文本HTML过滤器:HTMLPurifier使用教程(防止XSS)
在编程开发时安全问题是及其重要的,对于用户提交的数据要进行过滤,XSS就是需要重视的一点,先说一下什么是XSS,简单来说就是用户提交数据(例如发 表评论,发表日志)时往Web页面里插入恶意javasc ...
- erlang的md5加密
二话不说,直接上代码 -module(md5). -compile(export_all). md5(S) -> Md5_bin = erlang:md5(S), Md5_list = bina ...