美文网首页
Django快速入门2-Pages应用、模板与单元测试

Django快速入门2-Pages应用、模板与单元测试

作者: python测试开发 | 来源:发表于2021-07-17 10:38 被阅读0次

    本章将构建、测试和部署一个带有主页和关于页面的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()。

    扩展模板

    $ 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 %}
    

    测试

    # 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.haomeiwen.com/subject/vjoipltx.html