Django学习(四)(视图与网址进阶)

时间:2021-06-26 19:14:36

一.在网页上做加减法
1. 采用 /add/?a=4&b=5 这样GET方法进行

django-admin.py startproject zqxt_views
cd zqxt_views
python manage.py startapp calc

自动生成目录大致如下:

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文件

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.8.x及以上,Django 官方鼓励(或说要求)先引入,再使用。

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),
]

我们打开开发服务器并访问

python manage.py runserver 8002
如果提示 Error: That port is already in use.在后面加上端口号8001,8888

打开 http://127.0.0.1:8002/add/
Django学习(四)(视图与网址进阶)
这是因为我们并没有传值进去,我们在后面加上 ?a=4&b=5,即访问 http://127.0.0.1:8002/add/?a=4&b=5

就可以看到网页上显示一个 9,试着改变一下a和b对应的值试试看?
采用 /add/3/4/ 这样的网址的方式
前面介绍的时候就说过 Django 支持优雅的网址
我们接着修改 calc/views.py文件,再新定义一个add2 函数,原有部分不再贴出

def add2(request, a, b):
    c = int(a) + int(b)
    return HttpResponse(str(c))

接着修改 zqxt_views/urls.py 文件,再添加一个新的 url
Django 1.8.x 及以上:

 url(r'^add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),

我们可以看到网址中多了 (\d+), 正则表达式中 \d 代表一个数字,+ 代表一个或多个前面的字符,写在一起 \d+ 就是一个或多个数字,用括号括起来的意思是保存为一个子组,每一个子组将作为一个参数,被 views.py 中的对应视图函数接收。

我们再访问 http://127.0.0.1:8002/add/4/5/ 就可以看到和刚才同样的效果
Django学习(四)(视图与网址进阶)

本文来自
http://code.ziqiangxuetang.com/django/django-views-urls2.html