django表单(1)
时间过的很快,MTV一晃就过去了,现在开始整理表单,然后在整理之前学过的内容哈哈哈
我觉得处理表达的时候要注重的是逻辑,即每次传进来的方法,是post还是get~
1.不多说,直接上代码啦
第一传统方式
首先是urls和views(该代码是简单的在网页上输入两个值求和)
1 #urls.py 2 from django.conf.urls import url 3 from django.contrib import admin 4 from tests import views 5 6 7 urlpatterns = [ 8 url(r'^admin/', admin.site.urls), 9 url(r'^$',views.index), #第一次请求到index页面 10 url(r'^add/$',views.add), 11 ] #index页面的action 会重定向到/add/页面,然后通过 add函数渲染 12 13 14 #views.py 15 16 17 # -*- coding: utf-8 -*- 18 from __future__ import unicode_literals 19 20 from django.shortcuts import render 21 22 from django.http import HttpResponse 23 24 # Create your views here. 25 26 def index(request): 27 return render (request,'index.html')#进入index.html的渲染页面 28 29 30 def add(request): 31 a = request.GET.get('a') 32 b = request.GET.get('b') 33 34 return HttpResponse(str(int(a) + int(b)))
接下来是html页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>a + b</title> </head> <body> <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>
3.在以上要考虑函数的流程,先是渲染的127.168.0.1:8000的index.html页面,然后在html页面中填好数据提交后,便跳转到/add/?a=111&b=222页面,此时渲染的是add函数
结果如图
2.我们用django来处理。好啦,上代码
#urls from django.conf.urls import url from django.contrib import admin from tools import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$',views.index) ] #views # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render from django.http import HttpResponse from forms import AddForm # Create your views here. def index(request): if request.method == 'POST': print 'request post data :',request form = AddForm(request.POST) 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}) #froms.py from django import forms class AddForm(forms.Form): a = forms.IntegerField() b = forms.IntegerField()
接下来是index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="post"> {% csrf_token %}#为了安全要加上,解释之后再说 {{ form }} #通过上下文传递,即从{'form':form}(form=FromAdd())传递过来 也就是说通过django框架自带的表单来处理 <input type="submit" value="提交"> </form> </body> </html>
结果如下图所示:
第二种方法的过程,一开始请求的get请求,所以index的第一个if不成立,直接跳到else,实例化form,然后传递到index.html,当你完成数据的填写以后,提交,也是在当前网页提交,当前的urls是通过index函数渲染,但是此时却变为post方法,第一个if成立,然后在进入下面的操作。在django的表单中,填入的只能是数字,若是其他字符串,则无法进行跳转,会有系统提示,当然这是浏览器的功劳~