Django教程(创建博客应用程序)① – 准备工作,创建首页篇
这次我们将使用Django创建一个可以发布文章的博客应用。
Django 是什么?
Django是一个可以使用Python实现的Web应用程序框架。
框架是一种集成了开发应用所需功能的软件,在开发应用时使用。
通过引入框架,可以高效地推进Web应用的开发。
只需要一种选择:
这次我们将创建一个博客应用程序,使用Django可以简单地使用数据库,通过内容管理系统、维基百科、社交网络和新闻网站等,用较少的代码开发高质量的Web应用程序。对于简单的Web应用程序,有时甚至可以在几分钟内完成。当然,您也可以扩展功能并创建复杂的Web应用程序。
此外,Django也被应用于如Instagram等知名网络应用中,成为备受关注的框架,类似于Ruby中的Ruby on Rails。
环境构建
首先,我们需要创建一个用于工作的目录。
在这里,目录的名称可以随意取,暂且设定为“blog”。
mkdir blog
cd blog
安装 pipenv
为了排除其他模块的影响,最好不要破坏基本环境。因此,建议使用pipenv来创建虚拟环境。
pip install pipenv
# 環境によっては直接 pip を使えない場合もあるので、python3 -m pip install pipenv でインストールします
如果安装成功,就在工作文件夹中执行以下命令。
pipenv shell
当实行完以后,你将能够进入虚拟环境,并在命令行的开头显示与目录名称相对应的字符串。
(blog)bash-3.2$
安装Django
可以直接执行”pipenv install django”来安装Django,但考虑到以后使用Docker,我们决定在工作目录下创建名为”requirements.txt”的文件,并逐步记录所需模块。
由于现在只需要Django,因此以下是包括版本信息的写法。
Django==3.1.0
※这次我们将在Django 3.1.0上进行开发,不过我认为它也可以很好地运行在Django 2.2版本左右。
模块安装
通过执行以下命令,根据 requirements.txt 文件安装模块。
此处应该只安装 Django。
pipenv install -r requirements.txt
创建 Django 项目
在博客目录下运行
django-admin startproject mysite
我认为在亲项目的直接下面,文件结构是这样的。
├── Pipfile
├── Pipfile.lock
├── mysite
│ ├── manage.py
│ └── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── requirements.txt
启动Django服务器的测试
这个功能是用来启动开发服务器的。
(对于有过 Ruby on Rails 经验的人来说,可以简单地理解为运行命令 rails -s)
为了执行这个操作,最好先移动到存放 manage.py 文件的目录下,然后再执行。所以要先移动到 mysite/mysite 目录下并进行操作。
cd mysite
python3 manage.py runserver
如果正常运行,将出现以下输出。
October 16, 2020 - 21:30:23
Django version 3.1, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
目前,這一部分出現的訊息是由於尚未完成對名為 migrate 的資料庫的整合處理而產生的,但目前暫且不需要特別關注,沒有問題。
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
现在,我们已经启动了Django的开发服务器,现在我们可以通过浏览器进行确认。
在Chrome等浏览器的地址栏中输入”127.0.0.1:8000″,然后按下Enter键。

这是一切的开始。如果出现了这个画面,那么第一步已经完成了!恭喜!
项目设置
嗯,之前访问测试服务器时显示的是英文对吧。
可以在mysite/settings.py中进行这样的设置,其默认值是根据英语语系及时区进行语言显示。
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
我会将其改为以下方式。
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
当您再次访问测试服务器时,您会发现它已经变成日文表达。(此外,虽然您从这个界面不能确认,但时区也已设置为东京时间)。

创建一个 Django 应用程序
我使用先程的start-project命令创建了一个项目,接下来要开始制作应用程序。
虽然可能会感觉混乱,但基础项目和独立的应用程序是不同的东西。
在官方网页上有如下的解释。
什么是项目和应用的区别? 应用是指进行某种特定任务的Web应用程序,例如博客系统、公共记录数据库和小规模投票应用程序等。项目是指特定网站的架构和应用程序集合。一个项目可以包含多个应用程序。应用程序可以存在于多个项目中。
那么,让我们来制作一个博客应用程序吧。在mysite项目文件夹的根目录下(即存在manage.py文件的位置),执行以下命令。
python3 manage.py startapp blog
目前的目录结构是这样的。
.
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── blog
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
我想您可能已经注意到了,在博客下面创建了各种不同的文件。
我需要告诉项目组,这个应用是在这里创建的。
在 mysite/setting.py 文件中,有一个名为 “INSTALLED_APPS” 的字段,请在其中告诉该字段中是否存在 blog 应用程序。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.apps.BlogConfig', # ここを追加
]
模板,视图,URL的设置
首先,我们将分别更改每个模板。
模板是用于创建外观的部分,相当于HTML文件。
在mysite项目的根目录下创建一个templates文件夹,然后在其中创建一个blog文件夹,再进入该文件夹中创建一个index.html文件。
.
├── blog
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── templates
└── blog
└── index.html ←ここに作成
index.html 的内容暂时随意即可,没关系的。
<h1>Hello, from Django!</h1>
另外,你需要告诉项目在哪个位置创建了”templates”文件夹。和设置”INSTALLED_APPS”时一样,在”settings.py”文件中插入以下代码。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # ここを修正
'APP_DIRS': True,
接下来我们将修改 views.py。
我们将调用之前创建的模板index.html。
from django.views.generic import TemplateView
class IndexView(TemplateView):
template_name = 'blog/index.html'
URL 设计
然后,我们将创建一个专门用于博客应用的路由设置。
路由设置将在名为“urls.py”的文件中进行配置。
首先,让我解释一下。我们分别在整个项目的urls.py和应用程序内的urls.py文件中设置路由。
首先,从 mysite 的 urls.py 文件进行编辑。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('blog/', include('blog.urls')),
path('admin/', admin.site.urls),
]
在urlpatterns中,将会导入用于稍后创建的博客应用程序的urls。
在 mysite 的根目录下只有一个 urls.py 文件,但是在 blog 目录下也要创建一个名为 “urls.py” 的文件。
你可以选择在编辑器中创建,或者在 blog 应用的内部使用以下命令来创建。
touch urls.py
博客下面的文件结构如下。
.
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
├── urls.py
└── views.py
通过更改已创建的urls.py文件的内容,可以配置之前在views.py中创建的函数(即调用index.html的处理方式)的路由。
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
如果设置name=’index’,那么就可以使用名称”blog:index”来反向调用此URL。
我們將在此時點進行對 index.html 的呼叫確認。
在manage.py所在的目录中执行 runserver。
python3 manage.py runserver
如果一切顺利,接下来我们在浏览器中访问127.0.0.1:8000/blog。这样做是为了当之前在 mysite/urls.py 中访问带有 “blog” 的地址时,能够执行在 blog 应用程序中编写的内容。
如果能够访问并显示 index.html 的内容,那就是成功了。

下次,我们将创建模型并准备真正注册文章的过程。
继续:
Django教程(创建博客应用)② – 创建模型,准备管理界面