Django 视图与网址进阶
一 、在网页上做加减法
1. 采用 /add/?a=4&b=5 这样GET方法进行
django-admin.py startproject zqxt_views cd zqxt_views python3 manage.py startapp calc
自动生成目录大致如下(因不同的 Django 版本有一些差异,如果差异与这篇文章相关,我会主动提出来,没有说的,暂时可以忽略他们之间的差异,后面的教程也是这样做):
zqxt_views ├── calc │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.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 文件,添加一个网址来对应我们刚才新建的视图函数。
from django.contrib import admin from django.urls import path from calc import views as calc_views # new urlpatterns = [ path('add/', calc_views.add, name='add'), # new path('admin/', admin.site.urls), ]
我们打开开发服务器并访问
python3 manage.py runserver 8002 默认端口是 8000,上面使用了自定义端口 8002 如果提示 Error: That port is already in use. 我们可以在后面加上端口号8001,8888等
打开网址:http://127.0.0.1:8002/add/ 就可以看到
MultiValueDictKeyError at /add/
这是因为我们并没有传值进去,我们在后面加上 ?a=4&b=5,即访问 http://127.0.0.1:8002/add/?a=4&b=5
就可以看到网页上显示一个 9,试着改变一下a和b对应的值试试看?
2. 采用 /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
path('add/<int:a>/<int:b>/', calc_views.add2, name='add2'),
我们再访问 http://127.0.0.1:8002/add/4/5/ 就可以看到和刚才同样的效果,但是这回网址更优雅了
源代码下载: zqxt_views.zip 示例代码用Django2.2 创建。