Django 表单

有时候我们需要在前台用 get 或 post 方法提交一些数据,所以自己写一个网页,用到 html 表单的知识。

第一节:源码下载 zqxt_form_learn1.zip

比如写一个计算 a和 b 之和的简单应用,网页上这么写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
< html >
< body >
< p >请输入两个数字</ p >
 
 
< form  action = "/add/"  method = "get" >
     a: < input  type = "text"  name = "a" > < br >
     b: < input  type = "text"  name = "b" > < br >
     
     < input  type = "submit"  value = "提交" >
</ form >
 
 
</ body >
</ html >

把这些代码保存成一个index.html,放在 templates 文件夹中。

网页的值传到服务器是通过 <input> 或 <textarea>标签中的 name 属性来传递的,在服务器端这么接收:

1
2
3
4
5
6
7
8
9
10
11
12
from  django.http  import  HttpResponse
from  django.shortcuts  import  render
 
def  index(request):
     return  render(request,  'index.html' )
     
def  add(request):
     =  request.GET[ 'a' ]
     =  request.GET[ 'b' ]
     =  int (a)
     =  int (b)
     return  HttpResponse( str (a + b))

request.GET 可以看成一个字典,用GET方法传递的值都会保存到其中,可以用 request.GET.get('key', None)来取值,没有时不报错。

再将函数和网址对应上,就可以访问了,详情参见源码。

这样就完成了基本的功能,基本上可以用了。

但是,比如用户输入的不是数字,而是字母,就出错了,还有就是提交后再回来已经输入的数据也会没了。

当然如果我们手动将输入之后的数据在 views 中都获取到再传递到网页,这样是可行的,但是很不方便,所以 Django 提供了更简单易用的 forms 来解决验证等这一系列的问题。


第二节,使用 Django 的 表单 (forms)

例子足够简单,但是能说明问题

源码下载:zqxt_forms2.zip

1
2
3
4
新建一个 zqxt_form2 项目
django-admin.py startproject zqxt_form2
# 进入到 zqxt_form2 文件夹,新建一个 tools APP
python manage.py startapp tools

在tools文件夹中新建一个 forms.py 文件

1
2
3
4
5
from  django  import  forms
 
class  AddForm(forms.Form):
     =  forms.IntegerField()
     =  forms.IntegerField()

我们的视图函数 views.py 中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# coding:utf-8
from  django.shortcuts  import  render
from  django.http  import  HttpResponse
 
# 引入我们创建的表单类
from  .forms  import  AddForm
 
def  index(request):
     if  request.method  = =  'POST' : # 当提交表单时
     
         form  =  AddForm(request.POST)  # form 包含提交的数据
         
         if  form.is_valid(): # 如果提交的数据合法
             =  form.cleaned_data[ 'a' ]
             =  form.cleaned_data[ 'b' ]
             return  HttpResponse( str ( int (a)  +  int (b)))
     
     else : # 当正常访问时
         form  =  AddForm()
     return  render(request,  'index.html' , { 'form' : form})

对应的模板文件 index.html

1
2
3
4
5
< form  method = 'post' >
{% csrf_token %}
{{ form }}
< input  type = "submit"  value = "提交" >
</ form >

再在 urls.py 中对应写上这个函数

1
2
3
4
5
6
7
8
9
10
from  django.conf.urls  import  patterns, include, url
 
from  django.contrib  import  admin
admin.autodiscover()
 
urlpatterns  =  patterns('',
     # 注意下面这一行
     url(r '^$' 'tools.views.index' , name = 'home' ),
     url(r '^admin/' , include(admin.site.urls)),
)

新手可能觉得这样变得更麻烦了,有些情况是这样的,但是 Django 的 forms 提供了:

  1. 模板中表单的渲染

  2. 数据的验证工作,某一些输入不合法也不会丢失已经输入的数据。

  3. 还可以定制更复杂的验证工作,如果提供了10个输入框,必须必须要输入其中两个以上,在 forms.py 中都很容易实现


也有一些将 Django forms 渲染成 Bootstrap 的插件,也很好用,很方便。

扩展:如果提交后在同一个页面显示结果呢?请看 Django Ajax

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值