Django for beginner:用Django2.0部署最简单应用
Chapter 3
本章学习日期: 2018年3月4日
章节学习地址:https://djangoforbeginners.com/pages-app/
本章学习内容:
本章介绍了如何创建并部署一个Pages应用,有一个主页和一个关于页面。此外,还要学习Django的基于类的视图(class-based views)和模板。
初步设置
首先仍然是创建Django项目,并创建pages
应用。
$ cd ~/Desktop
$ mkdir pages
$ cd pages
$ pipenv install django
$ pipenv shell
(pages) $ django-admin startproject pages_project .
(pages) $ python manage.py startapp pages
将pages
应用添加进settings.py
里。
# pages_project/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'pages',
]
模板
任何网络框架都需要一种方便的方式生成HTML文件。在Django中,这种方法就是使用模板,这样每个HTML文件都可以通过URL访问。
默认情况下,Django是项目中的每个应用内找模板,但是这样过于麻烦,本课程是创建一个项目级的文件夹templates
,所有模板相关文件统一放置此处管理。
(pages) $ mkdir templates
(pages) $ touch templates/home.html
创建templates
文件夹,并于此创建一个home.html
。
在settings.py
里,更新如下配置,告诉Django来此处寻找模板:
# pages_project/settings.py
TEMPLATES = [
{
...
'DIRS': [os.path.join(BASE_DIR, 'templates')],
...
},
]
在home.html
增加一个简单的标题行。
(html comment removed: templates/home.html )
<h1>Homepage.</h1>
模板完成后,接着就是配置url和视图。
Class-Based Views
Django有两种视图,一种是Function-based views,另一种就是Class-Based Views。出于扩展和自定义的考虑,采用后者。
我们使用内置的TemplateView来展示模板。在pages/views.py
文件中更新代码:
# pages/views.py
from django.views.generic import TemplateView
class HomePageView(TemplateView):
template_name = 'home.html'
注意,视图是Python类,首字母大写。TemplateView
已经包含了展示模板的所有逻辑。
URLs
最后一步是更新我们的URLConfs。首先,我们要更新项目级的urls.py
文件,指向pages
应用,然后在pages
中匹配视图和路径。
更新项目级urls.py
文件。
# pages_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns =[
path('admin/', admin.site.urls),
path('', include('pages.urls'),
]
然后创建一个应用级urls.py
文件,添加下列代码:
#pages/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.HomePageView.as_view(), name='home'),
]
当我们使用Class-Based Views的时候,要使用as_view
在最后。
执行python manage.py runserver
,在http://127.0.0.1:8000/可以看到新的主页。
添加About页面
这一步与之前添加Home页面相似,同样是创建模板、新的视图和新的url路径。
在tempplates文件夹新增about.html
页面,添加简短的HTML标题。
(html comment removed: templates/about.html )
<h1>About page.</h1>
创建新的视图。
# pages/views.py
from django.views.generic import TemplateView
class HomePageView(TemplateView):
template_name = 'home.html'
class AboutPageView(TemplateView):
template_name = 'about.html'
将新的视图与about/
的url连接。
# pages/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.HomePageView.as_view(), name='home'),
path('about/', views.AboutPageView.as_view(), name='about'),
]
执行python manage.py runserver
,打开http://127.0.0.1:8000/about ,就能看到新的“About页面”。
扩展模板
模板的真正力量是它的可扩展性。大多数网站上,都会存在每个页面上都重复展示的内容(header,footer等等)。在Django上就能实现。
在templates
文件夹创建一个base.html
文件,包含指向两个页面的链接。
使用django内置的url tag添加链接。
(html comment removed: templates/base.html )
<header>
<a href="{% url 'home' %}">Home</a> | <a href="{% url 'about' %}">About</a>
</header>
{% block content %}
{% endblock %}
最后,更新home.html
和about.html
文件。
(html comment removed: templates/home.html )
{% extends 'base.html' %}
{% block content %}
<h1>Homepage.</h1>
{% endblock %}
(html comment removed: templates/about.html )
{% extends 'base.html' %}
{% block content %}
<h1>About page.</h1>
{% endblock %}
大功告成!
测试
最后,我们来到了测试环节。即便是一个非常基础的应用,测试也是非常重要的。
在pages
应用的tests.py
文件中,添加代码:
# pages/tests.py
from django.test import SimpleTestCase
class PagesTests(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.asertEqual(response.status_code, 200)
因为没有使用数据库,所以只用了SimpleTestCase
,如果用了数据库,可以使用TestCase
。
执行python manage.py test
。
(pages) $ python manage.py test
Creating test database for alias 'default'...
..
----------------------------------------------------------------------
Ran 2 tests in 0.028s
OK
Destroying test database for alias 'default'...
Git和Bitbucket
版本控制在上一章已经讲述,这里只贴一下代码,加深印象,不多赘述。
(pages) $ git init
(pages) $ git status
(pages) $ git add -A
(pages) $ git commit -m 'initial commit'
(pages) $ git remote add origin [email protected]:wsvincent/pages-app.git
(pages) $ git push -u origin master
记得将远程地址替换成自己的。
本地环境 VS 生产环境
直到目前为止,我们用Django做的都是本地的网站,没有上传到服务器上,其他人没法看到。
若要让网站在互联网上可见,就需要将代码部署到外部服务器上,也就是将代码放置在生产环境。
作者推荐了一个Heroku的服务器提供商。
感兴趣的同学可自行研究一番。
新年快乐!请接受cn区点赞机器人 @cnbuddy 对你作为cn区一员的感谢。假如我的留言打扰到你,请回复“取消”。