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的表单中,填入的只能是数字,若是其他字符串,则无法进行跳转,会有系统提示,当然这是浏览器的功劳~

posted @ 2017-09-11 22:51  shadowsmile  阅读(230)  评论(0编辑  收藏  举报