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):

    = request.GET[‘a‘]

    = request.GET[‘b‘]

    = 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):

    = 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/ 就可以看到和刚才同样的效果,但是这回网址更优雅了

时间: 2024-11-03 22:09:58

Django 视图与网址进阶的相关文章

1.2、Django 视图与网址__进阶

Django 视图与网址进阶 1.1.简单使用: 把我们新定义的app加到settings.py中的INSTALL_APPS中 修改 HelloDjango/HelloDjango/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.message

Django 视图与网址

Django 视图与网址 此文已经针对 Django 2.0 更新,适用于 Django 1.4 - Django 2.0 所有版本. Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数(或者generic类),我们用一个项目来演示. 下载本节所有源代码: 学习编程最好的办法就是动手敲代码,请按照教程做,本节很简单,不提供源代码了,动手开始吧! 一,首先,新建一个项目(project), 名称为 mysite 1 django-admin star

Django视图与网址

Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数(或者generic类),我们用一个项目来演示. 下载本节所有源代码: 学习编程最好的办法就是动手敲代码,请按照教程做,本节很简单,不提供源代码了,动手开始吧! 一,首先,新建一个项目(project), 名称为 mysite 1 django-admin startproject mysite 备注: 1. 如果 django-admin 不行,请用 django-admin.py 2. 如果是在

Django 视图与URL进阶

URLconf技巧 1.URL匹配中使用命名组 我们在urls.py中使用正则匹配url的时候,所调用视图中的函数这个过程,其实就是调用函数传递参数的过程,是否使用命名组就类似与调用函数时是否使用关键字参数 例: 一般是这样写: urlpatterns = [ #ex: /polls/extends/ url(r'extends/$', views.extends_test, name='extends_test'), #ex: /polls/search_form/ url(r'search_

django RESTful研究一第一个测试例子(用序列化器编写原生的Django视图函数)

让我们看看通过 Serializer 类怎样来编写 API 的视图函数,现在我们不会使用 REST 框架中的特性,仅仅写原生的Django视图函数. 一.我们创建一个 HttpResponse 的子类,用来将任何数据转换成 JSON格式. 编辑snippets/views.py,如下: from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from rest_framew

[diango]理解django视图工作原理

前言:正确理解django视图view,模型model,模板三种概念才能快速使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 正文:一个django视图需要拥有视图函数,如果想要视图函数工作则需要把 url 映射l到视图. 视图函数放在叫做views.py的文件中,这个文件位置位于django工程目录下 下面举例说明视图工作原理: 下面是一个返回当前日期和时间作为HTML文档的视图: from django.http import HttpResponse im

django -- 视图

django -- 视图 视图接受Web请求并且返回Web响应 视图就是一个python函数,被定义在views.py中 响应可以是一张网页的HTML内容,一个重定向,一个404错误等等 响应处理过程如下图: URLconf URLconf 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称name 编写URLconf的注意: 若要从url中捕获一个值,需要在它周围

Android中自定义视图View之---进阶篇(Canvas的使用)

更多技术内容请移步:我的个人博客 一.前言 今天是周日,昨天刚刚写完了一篇关于如何搭建LNMP环境,让自己可以DIY有个性的个人主页: http://blog.csdn.net/jiangwei0910410003/article/details/50929955 那么今天,我们继续来看一篇关于Android中的UI篇,如何自定义视图View的进阶篇,关于前奏篇之前已经写过了,还没有了解的同学可以去看看:http://blog.csdn.net/jiangwei0910410003/articl

Django中的ORM进阶操作

Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. 对于ORM对数据库的基本操作前面model里已经有了介绍,这里专门针对ORM的一对多.多对多.正向.反向等操作来讲解用法和注意事项. 铭记于心的两条: 在联表操作过滤查找数据时用双下划线 "__" 在取数据时用点 "." 一.一对多 首先来设计两张简单的表格,并在其中