Django中已经定义好了form类,可以很容易的使用Django生成一个表单。

一、利用Django生成一个表单:

1、在应用下创建一个forms文件,用于存放form表单。然后在forms中实例华一个表单。

forms.py

from django import forms

class BookForm(forms.Form):
name=forms.CharField(max_length=10)
publisher_id=forms.IntegerField(widget=forms.Select) #选择
publish_date=forms.DateField()

2、定义视图函数,将该表单传递给前端页面

views.py

from test1 import forms

def index(request):
form=forms.BookForm()
return render(request,'index.html',{'book_form':form})

3、定义前端生成表单的页面

index.html

<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> {{ book_form }} </body>
</html>

4、url的配置

urls.py

urlpatterns = [
url(r'^$',views.index)
]

经过以上几步的配置,就由Django生成了一个简单表单,效果如下图:

二、填充数据

1、定义视图处理函数

views.py

def index(request):
form=forms.BookForm()
if request.method=='POST':
form=forms.BookForm(request.POST) #表单提交的数据
if form.is_valid(): #验证提交的数据是否合法
form_data=form.cleaned_data #form.cleaned_data 为验证通过的数据
form_data['publisher_id']=request.POST.get('publisher_id') #从数据去里取publisher_id
book_obj=models.Book(**form_data) #将整个表单获取的数据传递给models.Book对象,
book_obj.save() #将获取的数据插入数据库
else:
print form.errors #如果验证不通过,输出错误
publisher_list=models.Publisher.objects.all() #生成出版社列表
return render(request,'index.html',{'book_form':form,'publishers':publisher_list}) #将表单提交的数据和出版社列表返回前端

2、定义前端html页面

index.html

<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post"> #Django中的Form不带form标签,自定义一个form标签
{{ book_form }}
{{ book_form.publisher_id}}
<select name="publisher_id">
{% for publisher in publishers %}
<option value={{ publisher.id }}>{{ publisher.name }}</option>
{% endfor %}
</select>
<input type="submit" value="创建图书">
</form>
</body>
</html>

三、ModelForm的使用

我们知道,在创建数据库的时候,在models.py文件中就定义了各个字段的类型已经限制条件。而此处的forms.py文件中又定义了一遍,这样使用起来很不方便。为了不重复定义,直接引用models.py中各个字段的定义,需要使用ModelForm类。

forms.py可以这样定义

from test1 import models

class BookModelForm(forms.ModelForm):
class Meta:
model=models.Book
exclude=() #关联表中所有的字段
widgets={
'name':forms.TextInput(attrs={'class':'form-control'}), #定义样式
}

views.py

def book_modelform(request):
form=forms.BookModelForm
if request.method=='POST':
form=forms.BookModelForm(request.POST)
if form.is_valid():
form.save()
else:
print form.errors
return render(request,'index1.html',{'book_modelform':form})

index1.html

<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post"> {% csrf_token %}
{{ book_modelform }}
<input type="submit" value="创建图书">
</form>
</body>
</html>

...

Django中的Form表单的更多相关文章

  1. Django中的Form表单验证

    回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错 ...

  2. Django 中的Form表单认证

    一.Form表单   1.1 Form的几个功能 验证用户数据(显示错误信息) 初始化页面显示内容 HTML Form提交保留上次提交数据 生成HTML标签   1.2 创建表单类Form 1. 创建 ...

  3. django中的 form 表单操作

     form组件  1. 能做什么事?   1. 能生成HTML代码  input框   2. 可以校验数据   3. 保留输入的数据   4. 有错误的提示   1. 定义   from django ...

  4. django中写form表单时csrf_token的作用

    之前在学习django的时候,在template中写form时,出现错误.百度,google后要加{% csrf_token %}才可以,之前一直也没研究,只是知道要加个这个东西,具体是什么也不明白. ...

  5. django中使用form表单,数据库保存密码出现明文

  6. Django组件之Form表单

    一.Django中的Form表单介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入 ...

  7. Django框架 之 Form表单和Ajax上传文件

    Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...

  8. Django 构建模板form表单的两种方法

    通常情况下,我们想构建一张表单时会在模板文件login.html中写入 <form action="/your-name/" method="post"& ...

  9. Javascript中的Form表单知识点总结

    Javascript中的Form表单知识点总结 在HTML中,表单是由form元素来表示的,但是在javascript中,表单则由HTMLFormElement类型,此元素继承了HTMLElement ...

随机推荐

  1. Tomcat禁止外网访问

    Tomcat中某个应用禁止外网访问 Tomcat中有多个应用,由于权限需要,将某一个主机禁止外网访问.在config/server.xml中设置: <Host name="172.16 ...

  2. 循序渐进看Java web日志跟踪(1)-Tomcat 日志追踪与配置

    日志,是软件运行过程中,对各类操作中重要信息的记录. 日志跟踪,不管对于怎么样的项目来说,都是非常重要的一部分,它关系到项目后期的维护和排错,起着举足轻重的作用.项目开发过程中,对日志的记录规则,也将 ...

  3. #if和#ifdef区别

    #if  是要去判断, 跟值有关 #ifdef  只要定义了即可, 就会走下面的代码, 不管值是0还是1 所以一般都是用#ifdef DEBUG调试

  4. linux 发送带附件的邮件

    一.mutt命令 1.安装 yum -y install mutt 2.使用 echo "mail content"|mutt -s "mail title"  ...

  5. iOS开发系列-九宫格算法-xib

    给大家演示 应用程序下载 小项目,效果图:涉及知识点:懒加载,九宫格算法,字典转模型,自定义UIView ,xib文件的使用 首先把素材拖到Xcode项目中:简单看一下素材文件 此时大家应该首先关注. ...

  6. [Poi2015]

    [POI2015]Łasuchy 一看以为是sb题 简单来说就是每个人获得热量要尽量多 不能找别人 首先这道题好像我自己找不到NIE的情况 很容易想到一个优化 如果一个数/2>另一个数 那么一定 ...

  7. 深入学习sea.js

    入门学习了文档之后,在深入学习里面的一些有趣的知识点 =================================== 一.配置 seajs.config({ alias:( a3:'./js/ ...

  8. centOS静态ip设置

    设置静态IP地址 1,先搜索了一下,得到以下解释IP          P地址Netmark     子网掩码Gateway     默认网关HostName    主机名称DomainName  域 ...

  9. Eclipse中安装Jdk和配置Python

    要借助Eclipse辅助工作,之前安装配置都是同事帮忙弄的,今天有空来整理一下安装配置步骤 一.安装JDK1.下载JDK,安装JDK,安装完毕,配置JDK环境变量  1)我的电脑右键-属性-高级-点击 ...

  10. EFI、GPT和BIOS、MBR

    用了数十年的PC机主板架构是BIOS模式.但在2004年,微软和英特尔共同推出一种名为可扩展固件接口(EFI)的主板升级换代方案.EFI,即可扩展固件接口(Extensible Firmware In ...