django单元测试使用正确数据库(django框架的特点)
程序员文章站
2024-03-26 19:28:53
本章将构建、测试和部署一个带有主页和关于页面的pages应用。我们将学习django的基于类的视图和模板,这些都是本书后面构建的更复杂的web应用的基础。创建应用$ mkdir pages &...
本章将构建、测试和部署一个带有主页和关于页面的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单元测试使用正确数据库(django框架的特点)
-
Django数据库的使用(sqlite) 博客分类: pythondjango pythondjango
-
在python3环境下的Django中使用MySQL数据库的实例
-
python django使用haystack:全文检索的框架(实例讲解)
-
Django ORM框架的定时任务如何使用详解
-
使用Python的Django框架中的压缩组件Django Compressor
-
在python3环境下的Django中使用MySQL数据库的实例
-
使用Python的Django框架中的压缩组件Django Compressor
-
python django使用haystack:全文检索的框架(实例讲解)
-
Django ORM框架的定时任务如何使用详解