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提交表单的更多相关文章

  1. Django提交表单时遇到403错误:CSRF verification failed

    这个问题是由跨站点伪造请求(CRSF)造成的,要彻底的弄懂这个问题就要理解什么是CRSF,以及Django提供的CSRF防护机制是怎么工作的. 什么是CSRF CSRF, Cross Site Req ...

  2. 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 ...

  3. 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. 4 django系列之HTML通过form标签来同时提交表单内容与上传文件

    preface 我们知道提交表单有2种方式,一种直接通过submit页面刷新方法来提交,另一种通过ajax异步局部刷新的方法提交,上回我们说了通过ajax来提交文件到后台,现在说说通过submit来提 ...

  5. Django:提交表单时遇到403错误:CSRF verification failed

    Django:提交表单时遇到403错误:CSRF verification failed 问题: 提交表单时遇到403错误:CSRF verification failed 解决方案: 在表单界面ht ...

  6. Django ajax方法提交表单,及后端接受数据

    前台代码: {% block content %} <div class="wrapper wrapper-content"> <div class=" ...

  7. 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单

    调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模 ...

  8. Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)

    Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点) 一丶Django的静态文件配置 #we ...

  9. django from表单验证

    django from表单验证   实现:表单验证 工程示例: urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from djan ...

随机推荐

  1. Windows网页上碰到无法完全显示的图片怎么办

    如图所示,下一幅图片只能显示一半. 我们选中并在新标签中打开 一般即可正常显示,如果还不行,留意地址栏,这就是这个图片的真实地址,我们完全可以用迅雷直接把这幅图片下载下来. 我们甚至可以猜测,去掉后缀 ...

  2. 输出C语言中 变量的类型

    使用gcc的警告信息间接知道变量的类型 #include <stdio.h> #include <stdlib.h> #include <stddef.h> #in ...

  3. springboot jpa | mybaits

    一.jpa: 1.jpa可以使用jpaRepository,@query的查询, 当然如果方法命名规范,可以不写sql代码 2.jpa可也使用EntityManager,通过@PersistenceC ...

  4. Android中关于cursor类介绍

    使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader.今天特地将它单独拿出来谈, ...

  5. preloadjs实现网页资源预加载

    <!doctype html> <html lang="zh"> <head> <title>PreloadJS的基础使用</ ...

  6. ASP.NET CORE RAZOR :将文件上传至 ASP.NET Core 中的 Razor 页面

    本部分演示使用 Razor 页面上传文件. 本教程中的 Razor 页面 Movie 示例应用使用简单的模型绑定上传文件,非常适合上传小型文件. 有关流式传输大文件的信息,请参阅通过流式传输上传大文件 ...

  7. C程序设计Week12晚上练习

    本周仅仅进行一个程序,曾经的一个程序. 自己定义例如以下函数,输入n(n<46)个学生的姓名和成绩,顺序输出这n个学生的姓名和成绩,并输出最高成绩的姓名和成绩.预习struct结构体,思考怎样改 ...

  8. c# 获取毫秒值,时间戳

    获取时间戳(秒) (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000 获取时间戳(毫秒) (DateTime. ...

  9. weex 学习

    相关资料和链接: # 官方网站https://weex.apache.org/cn/ # githubhttps://github.com/apache/incubator-weex # weex环境 ...

  10. Eureka 源码编译安装部署---Eureka运行eureka-server服务

    ---恢复内容开始--- 折腾了几天,终于运行好了,两个字:佩服 首先感谢这个大佬的博客支持:https://www.cnblogs.com/lifuping/p/5663127.html 1.首先在 ...