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())

				
时间: 2024-10-15 14:37:07

16.Django提交表单的相关文章

向Django提交表单

Python的django框架,做了一个前端页面,其中有一向要求提交表单,暂且总结一下流程,有不对的地方请指正: 1.在HTML页面写表单: <form enctype="multipart/form-data" method="POST" action="{% url 'upload' %}"> {% csrf_token %} <input type="file" name="your_file

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

调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模拟POST提交表单的需求,这里记录一下简单Django服务的搭建.以及使用HttpRequester对应进行GET/POST请求操作的流程. 1,搭建Django服务 1.1 搭建简单服务 搭建一个简单的Django服务很容易,只需要一行命令即可创建一个可运行的Django服务,若未安装Django

提交表单时如何保留多个空格及换行的文本样式

需求是:用户提交表单时屏蔽敏感词的功能.其中敏感词来自服务器端同一路径下的ciku.txt,敏感词通过"|"连接,例如"g|c|a",提交表单时替换敏感词,更重要的是,需要保持表单文本域中用户输入的多个空格及换行的样式,并原样输出.php代码如下: 1 <?php 2 header("Content-type:text/html;charset=utf-8"); 3 if($_POST){ 4 $pattern = array( 5 '/

JS采用ActiveXObject实现用户在提交表单时屏蔽敏感词的功能

本例中敏感词ciku.txt放在C盘根目录下,采用的ActiveXObject插件获取本地文件内容.使用此插件不需网上下插件,直接用如下js代码即可. 浏览器需修改interner安全选项的级别,启用ActiveX才能获取到代码中的ActiveXObject插件.如下图所示: js代码实现如下: 1 <script type="text/javascript"> 2 // -------------- 全局变量,用来判断文本域中是否包含脏词,默认为false,即不包含脏词-

php防止用户重复提交表单

我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦. 效果图: 那么如何规避这中重复提交表单的现象出现呢?我们可以从很多方面入手: 首先从前端做限制.前端JavaScript在按钮被点击一次后禁用,即disabled,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了javascript脚本则失效. 第二,我们可以在提交后做redirect页面重定向,

js防止回车(enter)键提交表单

如何防止回车(enter)键提交表单,其实很简单,就一句话.onkeydown="if(event.keyCode==13)return false;"把这句写在from标签里面就好了. 如果在页面中按Enter键会自动提交的话,可以设置返回值防止自动提交如<input id="q" name="q" type="text" onkeypress="javascript:return gosearch();&q

Django Form表单

Django  Form 表单 在实际的生产环境中比如登录和验证的时候,我们一般都使用Jquery+ajax来判断用户的输入是否为空,假如JS被禁用的话,咱们这个认证屏障是不是就消失了呢?(虽然一般不会禁用掉但是还是存在风险) 所以我们一般做两种认证一种是前端做一遍认证,在后端做一遍认证. 首先咱们看一下下面的案例: from django.shortcuts import render # Create your views here. def user_list(request): host

jQuery之ajaxForm提交表单

1.jQuery的设计非常优雅,其源代码亦给人以美感,利用jQuery框架写出来的js既简练又能完美跨浏览器.   2.jquery form插件是基于jQuery开发的一套能够利用ajax技术提交form的框架.   3.无论是jQuery,还是jquery form 都是老外写的.   4.通常的jQuery ajax提交写法如下:   5. $.post("../user/user.do?d=checkPasswordOnUpdateByAjax",{old_password:o

java 传入用户名和密码并自动提交表单实现登录到其他系统

不用单点登录,模拟远程项目的登录页面表单,在访问这个页面的时候自动提交表单到此项目的登录action,就可以实现登录到其他系统. ssh框架项目 1.以下是本地系统的action代码: 1 import java.io.IOException; 2 import java.util.List; 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 i