Django 视图与网址进阶
一 、在网页上做加减法
1. 采用 /add/?a=4&b=5 这样GET方法进行
1
2
3
|
django-admin.py startproject zqxt_views cd zqxt_views python manage.py startapp calc |
自动生成目录大致如下(因不同的 Django 版本有一些差异,如果差异与这篇文章相关,我会主动提出来,没有说的,暂时可以忽略他们之间的差异,后面的教程也是这样做):
1
2
3
4
5
6
7
8
9
10
11
12
13
|
zqxt_views/ ├── calc │ ├── __init__.py │ ├── admin.py │ ├── models.py │ ├── tests.py │ └── views.py ├── manage.py └── zqxt_views ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py |
我们修改一下 calc/views.py文件
1
2
3
4
5
6
7
8
|
from django.shortcuts import render from django.http import HttpResponse def add(request): a = request.GET[ 'a' ] b = request.GET[ 'b' ] c = int (a) + int (b) return HttpResponse( str (c)) |
注:request.GET 类似于一个字典,更好的办法是用 request.GET.get('a', 0) 当没有传递 a 的时候默认 a 为 0
接着修改 zqxt_views/urls.py 文件,添加一个网址来对应我们刚才新建的视图函数。
Django 1.7.x 及以下的同学可能看到的是这样的:
1
2
3
4
5
6
7
8
9
10
11
12
|
from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: url(r '^add/$' , 'calc.views.add' , name = 'add' ), # 注意修改了这一行 # url(r'^blog/', include('blog.urls')), url(r '^admin/' , include(admin.site.urls)), ) |
Django 1.8.x及以上,Django 官方鼓励(或说要求)先引入,再使用。
1
2
3
4
5
6
7
8
9
|
from django.conf.urls import url from django.contrib import admin from calc import views as calc_views urlpatterns = [ url(r '^add/$' , calc_views.add, name = 'add' ), # 注意修改了这一行 url(r '^admin/' , admin.site.urls), ] |
注意:低版本的 Django 也可以先引入,再使用
我们打开开发服务器并访问
1
2
3
|
python manage.py runserver 如果提示 Error: That port is already in use.在后面加上端口号8001,8888等 python manage.py runserver 8001 |
打开网址:http://127.0.0.1:8000/add/ 就可以看到
MultiValueDictKeyError at /add/
这是因为我们并没有传值进去,我们在后面加上 ?a=4&b=5,即访问 http://127.0.0.1:8000/add/?a=4&b=5
注意在最后不要加一个斜杠
就可以看到网页上显示一个 9,试着改变一下a和b对应的值试试看?
2. 采用 /add/3/4/ 这样的网址的方式
前面介绍的时候就说过 Django 支持优雅的网址
我们接着修改 calc/views.py文件,再新定义一个add2 函数,原有部分不再贴出
1
2
3
|
def add2(request, a, b): c = int (a) + int (b) return HttpResponse( str (c)) |
接着修改 zqxt_views/urls.py 文件,再添加一个新的 url
Django 1.7.x 及以下:
1
|
url(r '^add/(\d+)/(\d+)/$' , 'calc.views.add2' , name = 'add2' ), |
Django 1.8.x 及以上:
1
|
url(r '^add/(\d+)/(\d+)/$' , calc_views.add2, name = 'add2' ), |
这里的name='add2'关系不大可能只是为了识别,换成其他的没影响
我们可以看到网址中多了 (\d+), 正则表达式中 \d 代表一个数字,+ 代表一个或多个前面的字符,写在一起 \d+ 就是一个或多个数字,用括号括起来的意思是保存为一个子组(更多知识请参见 Python 正则表达式),每一个子组将作为一个参数,被 views.py 中的对应视图函数接收。
我们再访问 http://127.0.0.1:8000/add/4/5/ 就可以看到和刚才同样的效果,但是这回网址更优雅了
Django 视图与网址进阶的更多相关文章
- 【Django视图与网址进阶004】
一.在网页上做加减法 1. 采用 /add/?a=4&b=5 这样GET方法进行 django-admin.py startproject zqxt_views cd zqxt_views p ...
- 1.2、Django 视图与网址__进阶
Django 视图与网址进阶 1.1.简单使用: 把我们新定义的app加到settings.py中的INSTALL_APPS中 修改 HelloDjango/HelloDjango/settings. ...
- django 视图与网址
我是一个新手,内容粗糙,望大家多多指点.在这里我只是总结自身所学. 视图与网址 操作文件:urls.py.views.py urls.py 作用:用于处理前台的链接(如前台访问:127.0.0.1:8 ...
- Django视图与网址
Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数(或者generic类),我们用一个项目来演示. 下载本节所有源代码: 学习编程最好的办法就是动手敲代 ...
- 2django 视图与网址进阶
一.在网页中做加减法 采用/add/?a=11&b=22这样get方法进行 django-admin.py startproject zqxt_views cd zqxt_views pyth ...
- Django之路: 基本命令与网址进阶
一.Django 基本命令 温馨提示:如果你想学习Django,那么就请您从现在开始按照笔记记录一步一步的用手把代码敲出来,千万不要偷懒哦..... 1.创建一个Django project djan ...
- Django 2.0 学习(07):Django 视图(进阶-续)
接Django 2.0 学习(06):Django 视图(进阶),我们将聚焦在使用简单的表单进行处理和精简代码. 编写简单表单 我们将用下面的代码,来替换之前的detail模板("polls ...
- 【Mac系统 + Python + Django】之开发一个发布会系统【Django视图(二)】
此学习资料是通过虫师的python接口自动化出的书学习而来的,在此说明一下,想学习更多的自动化的同学可以找虫师的博客园,非广告,因为我python+selenium自动化也是跟虫师学的,学习效果很好的 ...
- [diango]理解django视图工作原理
前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...
随机推荐
- 微信电脑版-微信for windows客户端发布
12月份微信Windows版客户端1.0 Alpha推出,昨天微信for windows 1.0客户端(测试版)发布更新,超过三亿人使用的聊天应用,现在登录Windows桌面.你可以在Windows上 ...
- PHP计算一年有多少周,每周开始日期和结束日期
一年有多个周,每周的开始日期和结束日期 参考代码一:[正在使用的版本] <?php header("Content-type:text/html;charset=utf-8" ...
- Linux C 文件输入输出函数 fopen()、getc()/fgetc()、putc()/fputc()、fclose()、fprintf()、fscanf()、fgets()、fputs()、fseek()、ftell()、fgetpos()、fsetpos() 详解
fopen(打开文件) 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参 ...
- linux内核调度算法(2)--CPU时间片如何分配 转!
http://blog.csdn.net/russell_tao/article/details/7103012 内核在微观上,把CPU的运行时间分成许多分,然后安排给各个进程轮流运行,造成宏观上所有 ...
- 利用iis虚拟目录实现文件服务器功能(分布式存储)
要求说明: 通过网站上传文件保存到统一的文件服务器上. 服务器说明: 1.文件服务器以下称为FilesServer,IP地址为:192.168.1.213 2.Web服务器为以下称为WebServer ...
- am335x watchdog 设备出错
问题描述: am335x watchdog 设备节点打开失败. 如果是直接将omap_wdt 直接编译成uImage,这样会出现打开文件节点失败的情况. 如果单独编译成模块在后面文件系统内插入则不会. ...
- Alcatraz,
今天重装Alcatraz,运行github上的命令后,安装成功,可是配置界面没出来. 无奈重装, 先删除原本的插件 rm -rf ~/Library/Application\ Support/Deve ...
- Eclipse关闭XML文件验证的方法
XML的编写是否符合规范,可以通过XML Schema或DTD进行验证,但有时候电脑本来就很卡,而且XML的某些错误并未导致程序无法运行的情况下,暂时关闭XML的验证也算不错的选择. 如web.xml ...
- html5 Worker学习
HTML: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <t ...
- LeetCode 26 Remove Duplicates from Sorted Array
Problem: Given a sorted array, remove the duplicates in place such that each element appear only onc ...