django框架的特點,django單元測試使用正確資料庫

本章將構建、測試和部署一個帶有主頁和關於頁面的Pages應用。我們將學習Django的基於類的視圖和模板,這些都是本書後面構建的更複雜的Web應用的基礎。

創建應用

$ mkdir pages && cd pages
$ django-admin startproject config .
$ python manage.py startapp pages
$ vi config/settings.py
# config/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'pages', # new
]

模板

每個網路框架都需要方便的方法來生成HTML文件,在Django中使用模板:可以連接在一起的獨立HTML文件,也包括基本的邏輯。

首先要考慮的是在Django項目的結構中把模板放在哪裡。有兩個選擇。默認情況下,Django的模板載入器會在每個應用中尋找相關模板。然而,這個結構有些混亂:每個應用都需要一個新的模板目錄。

└── pages
    ├── templates
        ├── pages
            ├── home.html

這意味著我們需要創建一個新的模板目錄,一個新的應用目錄,頁面,以及最後我們的模板本身,即home.html。

另一種方法,那就是創建項目級模板目錄,並將所有模板放在其中。通過對config/settings.py文件做一個小小的調整,我們可以告訴Django也在這個目錄下尋找模板。這就是我們要使用的方法。

$ mkdir templates
$ vi templates/home.html
<!-- templates/home.html -->
<h1>Homepage</h1>
$ vi templates/about.html
<!-- templates/about.html -->
<h1>About page</h1>
$ vi config/settings.py
# config/settings.py
TEMPLATES = [
    {
        ...
        'DIRS': [str(BASE_DIR.joinpath('templates'))], # new
        ...
    },
]

基於類的視圖

我們將使用內置的TemplateView來顯示我們的模板。更新pages/views.py文件。

# pages/views.py
from django.views.generic import TemplateView


class HomePageView(TemplateView):
    template_name = 'home.html'


class AboutPageView(TemplateView): # new
    template_name = 'about.html'

URLs

config/urls.py

# config/urls.py
from django.contrib import admin
from django.urls import path, include # new

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('pages.urls')), # new
]

pages/urls.py

# pages/urls.py
from django.urls import path
from .views import HomePageView, AboutPageView # new

urlpatterns = [
    path('about/', AboutPageView.as_view(), name='about'), # new
    path('', HomePageView.as_view(), name='home'),  
]

當使用基於類的視圖時,你總是在視圖名稱的後面加上as_view()。

Django快速入門2-Pages應用、模板與單元測試

擴展模板

$ touch templates/base.html
$ vi templates/base.html 
<!-- templates/base.html -->
<header>
  <a href="{% url 'home' %}">Home</a> |
  <a href="{% url 'about' %}">About</a>
</header>

{% block content %}
{% endblock content %}

$vi templates/home.html
<!-- templates/home.html -->
{% extends 'base.html' %}

{% block content %}
<h1>Homepage</h1>
{% endblock content %}

$vi templates/about.html 
<!-- templates/about.html -->
{% extends 'base.html' %}

{% block content %}
<h1>About page</h1>
{% endblock content %}
Django快速入門2-Pages應用、模板與單元測試

測試

Django快速入門2-Pages應用、模板與單元測試
# pages/tests.py
from django.test import SimpleTestCase


class SimpleTests(SimpleTestCase):
    def test_home_page_status_code(self):
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)

    def test_about_page_status_code(self):
        response = self.client.get('/about/')
        self.assertEqual(response.status_code, 200)

我們在這裡使用 SimpleTestCase 因為我們沒有使用資料庫。如果我們使用資料庫,我們會使用 TestCase。然後我們檢查每個頁面的狀態碼是否為 200,這是成功 HTTP 請求的標準響應。

執行:

$ python manage.py test
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.060s

OK
Django快速入門2-Pages應用、模板與單元測試

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232810.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-11 13:22
下一篇 2024-12-11 13:23

相關推薦

發表回復

登錄後才能評論