Django表单提交一共有三种方式:

1.不使用Django组件进行提交

2.使用django.forms.Form(所有表单类的父类)进行提交

3.使用django.forms.ModelForm(可以和模型绑定的Form)进行提交

这里的例子是,给Publisher这个表里添加数据,表结构如下:

  1. 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("网址")
  2.  
  3. class Meta:
    verbose_name = '出版商'
    verbose_name_plural = verbose_name
  4.  
  5. def __str__(self):
    return self.name

urls.py里加入如下配置:

  1. 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表单

  1. <!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(自己接受数据,自己组装数据)

  1. 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的子类

  1. from django import forms
  2.  
  3. 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文件:这样不用自己写表单了

  1. <!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文件:不用一个一个接受参数,也不用自己做参数校验了

  1. 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的子类

  1.   from django import forms
      from hello.models import Publisher
  2.  
  3.   class PublisherForm(forms.ModelForm):
       class Meta:
       model = Publisher
       exclude = ("id",)
  4.  
  5. views.py文件:不用一个一个接受参数,也不用自己做参数校验了,也不同自己创建对象
  1.   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())
  1.  
  1.  

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. MySQL的左外连接

    代码: select t1.descid, IFNULL(t2.cnt,) as countnew, t1.description from uosdesc t1 left outer join t2 ...

  2. Solidworks 如何快速完全定义草图

    工具-尺寸标注-完全定义草图

  3. 使用RTTI为继承体系编写”==”运算符

    转载请注明出处:http://www.cnblogs.com/inevermore/p/4012079.html   RTTI,指的是运行时类型识别技术.   先看一个貌似无关的问题:   为继承体系 ...

  4. Android应用程序快速更换包名的方法

    今天遇到需要修改Android包名的问题,开始试了直接修改包名,会出现一些错误 1.layout中直接引用类的地方 2.Manifest中对gen定义的地方 经测试,总结出一下方法: 1.关闭自动编译 ...

  5. SQLserver备份数据库示例

     BACKUP DATABASE [yee]TO  DISK = N'D:\数据库备份\yee2015.9.11.bak'WITH  NAME = N'yee - 备份',  NOFORMAT, NO ...

  6. iOS将数组中的内容分拼接成字符串

    NSString *string = [array componentsJoinedByString:@","];--分隔符

  7. win7不休眠方式设置

    方式1:命令行下以管理员方式执行:powercfg -h off 方式2:右键个性化-->屏幕保护程序-->更改电源设置--->更改计算机睡眠时间--->是计算机进入睡眠状态选 ...

  8. C#开发--FTP操作方法管理

    1.整理简化了下C#的ftp操作,方便使用    1.支持创建多级目录    2.批量删除    3.整个目录上传    4.整个目录删除    5.整个目录下载 2.调用方法展示, var ftp ...

  9. 数据结构之shell排序

    #SIZE  10        //直接插入排序     void insert_sort(){           int i,j;           int array[SIZE+1];   ...

  10. jquery的push()

    JavaScript push() 方法 JavaScript Array 对象 定义和用法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 语法 arrayObject.pus ...