有时候我们需要在前台用 get 或 post 方法提交一些数据,所以自己写一个网页,用到 html 表单的知识。
比如写一个计算 a和 b 之和的简单应用,网页上这么写
第一节:
比如写一个计算 a和 b 之和的简单应用,网页上这么写
<!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 属性来传递的,在服务器端这么接收:
from django.http import HttpResponse
from django.shortcuts import renderdef index(request): return render(request, 'index.html')def add(request): a = request.GET.get('a',0) b = request.GET.get('b',0) a = int(a) b = int(b) return HttpResponse(str(a+b))request.GET 可以看成一个字典,用GET方法传递的值都会保存到其中,可以用 request.GET.get('key', None)来取值,没有时不报错。
第二节,使用 Django 的 表单 (forms)
新建一个 zqxt_form2 项目
django-admin.py startproject zqxt_form2# 进入到 zqxt_form2 文件夹,新建一个 tools APPpython manage.py startapp tools在tools文件夹中新建一个 forms.py 文件
from django import forms
class AddForm(forms.Form): a = forms.IntegerField() b = forms.IntegerField()我们的视图函数 views.py 中
# coding:utf-8
from django.shortcuts import renderfrom django.http import HttpResponse# 引入我们创建的表单类from .forms import AddFormdef index(request): if request.method == 'POST':# 当提交表单时 form = AddForm(request.POST) # form 包含提交的数据 if form.is_valid():# 如果提交的数据合法 a = form.cleaned_data['a'] b = form.cleaned_data['b'] return HttpResponse(str(int(a) + int(b))) else:# 当正常访问时 form = AddForm() return render(request, 'index.html', {'form': form})对应的模板文件 index.html
<form method='post'>
{% csrf_token %}{ { form }}<input type="submit" value="提交"></form>再在 urls.py 中对应写上这个函数
from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()urlpatterns = patterns('', # 注意下面这一行 url(r'^$', 'tools.views.index', name='home'), url(r'^admin/', include(admin.site.urls)),)