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键。

image.png

这是一切的开始。如果出现了这个画面,那么第一步已经完成了!恭喜!

项目设置

嗯,之前访问测试服务器时显示的是英文对吧。
可以在mysite/settings.py中进行这样的设置,其默认值是根据英语语系及时区进行语言显示。

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

我会将其改为以下方式。

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

当您再次访问测试服务器时,您会发现它已经变成日文表达。(此外,虽然您从这个界面不能确认,但时区也已设置为东京时间)。

image.png

创建一个 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 的内容,那就是成功了。

image.png

下次,我们将创建模型并准备真正注册文章的过程。

继续:
Django教程(创建博客应用)② – 创建模型,准备管理界面

广告
将在 10 秒后关闭
bannerAds