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. hdu 5996 dingyeye loves stone(博弈)

    题目链接:hdu 5996 dingyeye loves stone 题意: 给你一棵树,树的每一个节点有a[i]个石子,每个人可以将这个节点的石子移向它的父亲,如果没有合法操作,那么就算输,现在给你 ...

  2. CentOS7配置OpenCV2.4.13

    以管理员身份运行su root输入密码 安装依赖包 yum install gcc gcc-c++ gtk2-devel gimp-devel gimp-devel-tools gimp-help-b ...

  3. 在GNU/Linux下使用Lilypond排版简谱

    尽管GNU/Linux并非无所不能,但确实能在很多时候提供免费.开放的解决方案.这两天我想做一个简谱,在网上搜索乐谱排版软件,发现了基于GPL协议的Lilypond软件.只不过Lilypond是用来做 ...

  4. U31网管配置

    1.新建网元和子架配置: 在拓扑图空白处新建对象-创建承载传输网元-选择设备-填写网元名称(A).网元类型.IP(查询出SNP的),网关IP会自动在此基础上加2.如果数据库为空先选离线- 机架子架配置 ...

  5. JTable

    final Table table = new Table(parent, SWT.NONE | SWT.FULL_SELECTION); final GridData gd = new GridDa ...

  6. Registry Workshop(注册表编辑器) V4.6.3 官方中文版

    软件名称: Registry Workshop(注册表编辑器)软件语言: 简体中文授权方式: 免费试用运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 1.1MB图 ...

  7. php 问答

    1,如何设置长生命期的session ? 将 session.cookie_lifetime ,session.gc_maxlifetime 的时间设置长一点. 2,为什么初始化session的时候报 ...

  8. 自己通过反射写的一个属性copy类

    package com.xxx.beancopier; import java.lang.annotation.Documented; import java.lang.annotation.Elem ...

  9. Code Sign error: No code signing identities found: No valid signing identities

    Code Sign error: No code signing identities found: No valid signing identities 解决办法:如果证书可获取,最简办法就是把所 ...

  10. JAVA内容回顾(二)——面向对象(OOP)

    1.类与对象 类:类指的是同种对象的抽象,看不见摸不着的.包含有属性与方法. 对象:是类的具体实现,看的见摸得着的东西. 类是对象的抽象,对象是类的具体实现. 2.访问修饰符 public:在项目的任 ...