1. 程式人生 > >django檢視進階

django檢視進階

https://code.ziqiangxuetang.com/django/django-views-urls2.html

一 、在網頁上做加減法

1. 採用 /add/?a=4&b=5 這樣GET方法進行

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檔案

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

]

我們開啟開發伺服器並訪問

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

1

    url(r'^add/(\d+)/(\d+)/$', 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