zoukankan      html  css  js  c++  java
  • Django 视图与网址进阶

    此文已经针对 Django 2.0 更新,适用于 Django 1.4 - Django 2.0 所有版本。

    一 、在网页上做加减法

    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 也可以先引入,再使用

     

    Django 2.0 版本的同学看下面(上面 Django 1.8 的在 2.0 中也可以用,是兼容的)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    from django.contrib import admin
    from django.urls import path
    from calc import views as calc_views
     
     
    urlpatterns = [
        path('add/', calc_views.add, name='add'),  # new
        path('admin/', admin.site.urls),
    ]

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

    1
    2
    3
    python 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 函数,原有部分不再贴出

    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 - Django 1.11.x:

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

    Django 2.0 及以上:

    1
        path('add/<int:a>/<int:b>/', calc_views.add2, name='add2'),

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

    我们再访问 http://127.0.0.1:8002/add/4/5/ 就可以看到和刚才同样的效果,但是这回网址更优雅了

    Django views.py urls.py

  • 相关阅读:
    字符编码
    数据类型
    流程控制之判断,while循环,for循环
    数据类型,与用户交互,格式化输出,基本运算符
    操作系统,编程语言分类,执行python两种方式,变量,内存管理,定义变量的三个特征
    计算机硬件基础-笔记
    20200714_31adb命令和monkey压力稳定性测试
    20200707_28POM
    20200705_27DDT与Yaml数据驱动
    20200702_26UnitTest套件与运行器
  • 原文地址:https://www.cnblogs.com/laoqr/p/9289571.html
Copyright © 2011-2022 走看看