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. C语言编程小tip

    1. 随机数产生 int rand(void)产生的随机数每次运行时都是与上一次相同,若要不同,用函数srand()初始化之. void srand(unsigned int seed)初始化随机数发 ...

  2. python3 验证用户名密码

    输入用户名,密码,匹配通过,不匹配报错 import getpass user = input('input username: ') pwd = getpass.getpass('input pas ...

  3. TODO:字节序的一些理解

    TODO:字节序的一些理解 本文是小编对字节序的片面理解,希望对你有帮助哈. 字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前. 1.Little endian:将低 ...

  4. html基础及心得

    html开始 <adress></adress>斜体(地址) <em><em>斜体(表示强调) <code></code>插入一 ...

  5. Python学习笔记——基础篇【第六周】——hashlib模块

    常用模块之hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import ...

  6. CentOS 7 systemd service开机启动设定

    #vi /etc/systemd/system/xxx.service [Unit] Description=startup script test [Service] Type=simple Exe ...

  7. 杭电OJ--自行车计速器

    Biker's Trip Odometer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  8. python setup.py install 报错ImportError: No module named setuptools

    学习光荣之路python课程时,使用python setup.py install安装其他模块时,第一次安装某模块成功了.安装另一模块却报错ImportError: No module named s ...

  9. 使用vs2010打开VS2013的工程文件

    在开发团队,会出现vs工具使用版本的不一样的情况.我的电脑使用的是VS2010,可是其他人员使用的是vs2013. 要打开其他人员上传的工程文件,可以通过三种方式: 1.下载一个vs2013版本. 2 ...

  10. winform 制作圆形图片框

    public partial class CirclePictureBox : PictureBox { public CirclePictureBox() { Circle = true; Init ...