# Django Step by Step (二)

## 1 引言

随着学习,我们的例子也开始复杂了,下一步我想实现一个简单的 web 加法器。界面会是这样:

![](https://img.kancloud.cn/d4/9a/d49a4d507cad84d36127e806824b5f4d_541x35.png)

很简单。通过本节的学习我们可以学习到:

如何处理页面表格提交的数据,并且会对 URL Dispatch 作更进一步的解释。

## 2 创建 add.py 文件

我们在newtest子目录中创建一个 add.py 文件。(由于我们还没有涉及到 Django 的模型,因此象 add.py 这样的东西叫什么呢?还是称其为 View 吧。因为在 django 中,View 是用来显示的,它代替了一般的 MVC 中的 Control 的作用,因为 Django 中不是 MVC 而是 MTV (Model Template View))

```python

from django.http import HttpResponse

text = """

+

"""

def index(request):

if 'a' in request.POST:

a = int(request.POST['a'])

b = int(request.POST['b'])

else:

a = 0

b = 0

return HttpResponse(text % (a, b, a + b))

```

这里只有一个 index 方法。所有在 view 中的方法第一个参数都会由 Django 传入 request 对象,它就是请求数据对象,它是由 Django 自动生成。其中有 GET 和 POST 属性,分别保存两种不同的提交方式的数据,它们都可以象字典一样工作。

那么我的想法就是:

进入页面就是上面的效果,页面上有两个输入文本框,一个提交按钮,一个显示结果的文本框。在两个输入文本框中输入整数,然后点击提交("="号按钮),将返回相同的页面,但结果文本框中将显示两数相加的和。两个输入文本框分别定义为 a 和 b 。

这里的逻辑就是:先判断 POST 数据中是否有变量 a ,如果没有则表示是第一次进入,则 a, b 初始为 0 ,然后返回页面。如果有变量 a ,则计算结果,返回页面。

其实这里面有许多可以细说的东西,那么我把它们放在后面陈述。

## 3 修改urls.py

```python

from django.conf.urls import url

from django.contrib import admin

from . import helloworld, add

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^$', helloworld.index),

url(r'^add/$', add.index),

]

```

增加 add 的 url 映射。

## 4 启动 server

## 5 在浏览器测试

点击提交之后,你会看到下面这个信息:

![](https://img.kancloud.cn/dd/91/dd91d35731d3171eed3184f246b63087_977x572.png)

这是由于Django默认启动了防止CSRF(Cross-site request forgery:跨站请求伪造,是一种对网站的恶意利用)攻击的安全设置。本章暂不讨论这方面的内容,我们通过装饰器(decorator)关闭这个设置。

修改add.py文件:

```python

from django.http import HttpResponse

from django.views.decorators.csrf import csrf_exempt

text = """

+

"""

@csrf_exempt

def index(request):

if 'a' in request.POST:

a = int(request.POST['a'])

b = int(request.POST['b'])

else:

a = 0

b = 0

return HttpResponse(text % (a, b, a + b))

```

你会看到和我相似的界面,然后输入整数试一试吧。

## 6 补充说明

1. 在 form 中的 method="post" 。你当然可以使用 get ,但是在 Django 的设计风格中认为,使用 POST 表示要对数据进行修改,使用 GET 则只是获取,这是一个设计风格,并且不仅仅属于 Django 。如果能够养成习惯是非常好的。

2. Django 提供了 URL Dispatch 文档,专门讲解有关 url 映射的东西。其中有一部分是关于 url 的正则表达式解析的。原本我认为象 Karrigell 中一样,定义在 form 中的变量会自动映射为方法的参数,但是我错了。方法中的参数是从 url 中通过正则表达式解析出来的,或者是在 url_conf(即 urls.py 文件)中指定的。因此它与 Karrigell 一点也不一样。因此,如果你想从 POST 或 GET 数据中得到值,那么象我一样去做好了。使用 request.POST 或 request.GET 或还有一个可以“统吃”的方法 request.REQUEST ,它们是一个字典数据,使用起来也算方便。

从这里我更想了解方法中参数的使用,当然这个例子并没有,有机会再使用吧。关于正则表达式解析参数在 blog 和 rss 中用得是非常多的。

python加法例子_第二讲 做加法的例子相关推荐

  1. 计算机安全学第2版pdf,计算机安全学讲义_第二讲:分组密码.pdf

    计算机安全学讲义_第二讲:分组密码.pdf 研究生课程 第二讲:分组密码 研究生课程 第二讲:分组密码 计算机安全学 通信系统保密模型 计算机安全学 对称密码体制-分组密码 Cryptography ...

  2. 计算机基础算术加法,计算机基础第二讲.ppt

    计算机基础第二讲 计算机的运算 算术运算:加.减.乘.除 逻辑运算:与.或.非 数据比较:大于.小于.等于.不等于.大于等于.小于等于 数据传送:输入.输出.赋值 二进制的算术运算 加法 0+0=0 ...

  3. matlab图像导数求积分_第二讲matlab求微分方程导数积分

    第二讲matlab求微分方程导数积分 第二讲 导数与微分方程 一.实验内容 1.实际引例 (牛顿冷却模型)警察上午9点钟发现一被谋杀者,并测得尸体温 度为32.4℃,一小时以后,尸体的温度变为31.7 ...

  4. python正则表达式操作指南_第二篇详细Python正则表达式操作指南(re使用)

    接下来昨天的内容 执行匹配 一旦你有了已经编译了的正则表达式的对象,你要用它做什么呢?`RegexObject` 实例有一些方法和属性.这里只显示了最重要的几个,如果要看完整的列表请查阅 Python ...

  5. python open函数_精选2个小例子,带你快速入门Python文件处理

    阅读本文大概需要7分钟讲完了函数和模块,我们来讲一讲文件的使用,python对数据的处理分两种一种是本地文件的处理,另外一种是通过网络数据处理(也就是爬虫相关的).而本地的数据处理,主要是通过文件的读 ...

  6. 专科学python真的不好_专科生转行做python运维靠谱吗?

    看了下问题,专科做运维,的确在找工作的时候没有优势,but,这并不代表运维行业对学历要求高,而是你找别的工作,专科也没有什么优势. 知乎水平动辄985,专科就显得那么的微不足道. 但没有竞争力不太表找 ...

  7. python redis缓存_第二百九十五节,python操作redis缓存-字符串类型

    python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...

  8. python七彩同心圆_用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏---七彩同心圆 用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便 ...

  9. 在日本的python程序员_在日本做程序员是怎么一种体验?

    不请自来,人在东京,刚下--来东京一年多了. ------------------------------------- 最近好多人问我怎么到东京工作--? 首先,我说的很清楚了,我自己也是稀里糊涂来 ...

最新文章

  1. 嵌入式linux alsa,嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得
  2. 【java】兴唐第二十三节课(暑期第一节TreeSet)
  3. OpenShift Rancher 进行持续集成
  4. LeetCode 1063. 有效子数组的数目(单调栈)
  5. python保存图片_python保存网络图片问题
  6. Qt 字符串QString arg()用法总结
  7. 图形裁剪算法matlab,MATLAB裁剪图片
  8. K-means聚类分析算法(二)
  9. word 的脚注横线和文字怎么调整为左对齐?
  10. Java 下一代: Groovy、Scala 和 Clojure
  11. 织梦Dedecms源码文件夹目录模板解释说明
  12. 码力十足学量化|如何获取指数成分股及权重数据
  13. python 百分号调用内置函数_打牢Python基础这12类内置函数你掌握了吗
  14. WORKNC基础到进阶视频教程
  15. SAP中寄售结算税码取值问题分析
  16. hive 以beeline的模式启动
  17. 什么是工作流?(转贴)
  18. Archlinux双显卡安装NVIDIA闭源驱动
  19. Java 接收返回json数据动态取data里的值
  20. 3转自 饮水思源 bbs.sjtu.edu.cn·[FROM: 202.120.25.97]

热门文章

  1. WPF TreeView 绑定(demo 转)
  2. Tomcat是如何将请求一步步传递到我们编写的HttpServlet类中的
  3. 编写base64图片文件
  4. 团队开发里频繁使用 git rebase 来保持树的整洁好吗?
  5. 十大经典排序算法最强总结(含JAVA代码实现),大厂 HR 如何面试
  6. JavaScript 的 switch 条件语句
  7. Python字符串怎样实现contains效果
  8. python面试题之如何计算一个字符串的长度
  9. VMWare虚拟机下为Windows Server 2012配置静态IP(NAT方式)
  10. mvc做网站怎么在mvc中直接访问.html网页 [问题点数:20分]