如何搭建 Django 网站

举报
tianhequ9 发表于 2018/12/31 13:09:31 2018/12/31
【摘要】 Django是一个非常受欢迎的全功能服务器端Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发人员构建。Django负责处理Web开发大部分繁琐的工作,因此您可以专注于编写应用程序而无需重新编写框架。它是免费和开源的,拥有蓬勃发展的活跃社区,优秀的文档,以及许多免费和付费支持的选项。本篇教程将指导使用Django构建一个简单的网站框架。您将会了解如何在服务器上搭建Py...

Django是一个非常受欢迎的全功能服务器端Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发人员构建。Django负责处理Web开发大部分繁琐的工作,因此您可以专注于编写应用程序而无需重新编写框架。它是免费和开源的,拥有蓬勃发展的活跃社区,优秀的文档,以及许多免费和付费支持的选项。

本篇教程将指导使用Django构建一个简单的网站框架。您将会了解如何在服务器上搭建Python3及Django框架,并创建您的第一个项目。您需要准备一个云服务器CVM。还没有云服务器的同学可以到华为云点击产品中的云服务器,进行购买。

开发环境是在本地计算机上安装Django,您可以在将Django应用程序部署到生产环境之前用它们进行开发和测试。Django本身提供的主要工具是一组用于创建和使用Django项目的Python脚本,以及一个可用于测试本地(即在您的计算机上,而不是在外部Web服务器上)的简单开发 Web服务器。

创建网站

我们将介绍如何创建网站的基本框架,然后您可以对其进行设置,路径选择,模型搭建,视图和模板填充。

创建项目

首先打开命令提示符/终端,确保您在虚拟环境中,导航 到您要存储Django应用程序的位置,并为您的新网站创建一个文件夹(举例:django_projects)。然后使用cd命令进入该文件夹:

mkdir django_projects 
cd django_projects

使用django-admin startproject 命令创建新项目locallibrary(您也可以使用其他命名),然后导航到该文件夹。

django-admin startproject locallibrary
cd locallibrary

django-admin工具创建文件夹/文件结构,如下所示:

locallibrary/
    manage.py
    locallibrary/
        __init__.py
        settings.py
        urls.py
        wsgi.py

我们当前的工作目录应如下所示:

../django_projects/locallibrary/

locallibrary项目的子文件夹是网站的入口点:

  • init.py是一个空文件,指示Python将此目录视为Python包。

  • settings.py包含所有的网站设置。这是我们注册我们创建的任何应用程序,静态文件的位置,数据库配置详细信息等的地方。

  • urls.py定义站点URL到视图的映射。虽然这可能包含所有 url映射代码,但更常见的是将某些映射委托给特定应用程序,稍后您将看到。

  • wsgi.py 用于帮助您的Django应用程序与Web服务器通信。您可以将其视为样板。

manage.py脚本用于创建应用程序,与数据库的工作,并开始开发网络服务器。

创建目录应用程序

接下来,运行以下命令来创建将存在于我们的localibrary项目中的目录应用程序(这必须与项目的manage.py在同一文件夹中运行):

python3 manage.py startapp catalog

该工具将创建一个新文件夹,并使用文件填充该应用程序的不同部分(下面以粗体显示)。大多数的文件会以其目的来进行有效地命名(例如,意见应存放在views.py,模型存在models.py,测试存在tests.py,管理站点配置是  admin.py,申请注册是apps.py),并含有一些用于处理相关对象的最小样板代码。

更新的项目目录现在应如下所示:

locallibrary/
    manage.py
    locallibrary/
    catalog/
        admin.py
        apps.py
        models.py
        tests.py
        views.py
        __init__.py
        migrations/

另外我们现在有:

  • 一个迁移的文件夹,用来存放“迁移” -文件允许你修改你的模型自动更新数据库。

  • init.py - 这里创建的空文件,以便Django / Python将该文件夹识别为Python包,  并允许您在项目的其他部分中使用其对象。

注册目录应用程序

既然已经创建了应用程序,我们必须将它注册到项目中,以便在运行任何工具时将其包含在内(例如,将模型添加到数据库中)。通过将应用程序添加到INSTALLED_APPS项目设置中的列表来注册应用程序  。

打开项目设置文件django_projects / locallibrary / locallibrary / settings.py并找到INSTALLED_APPS 列表的定义。然后在列表末尾添加一个新行,如下面的注释所示。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'catalog.apps.CatalogConfig', //添加此行]

新行指定在 创建应用程序时CatalogConfig/locallibrary/catalog/apps.py中为您生成的应用程序配置对象()。

指定数据库

这也是您通常指定要用于项目的数据库的点 - 在可能的情况下使用相同的数据库进行开发和生产是有意义的,以避免一些细微的差别。您可以在数据库(Django文档)中找到有关不同选项的信息。

我们将在这个例子中使用SQLite数据库,因为我们不希望在演示数据库上需要大量的并发访问,而且因为它不需要额外的设置!您可以在settings.py中查看此数据库的配置方式(下面还包含更多信息):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }}

因为我们使用的是SQLite,所以我们不需要在此处进行任何进一步的设置。

其他项目设置

settings.py文件也用于配置其他一些设置,但在这一点上,你可能只是想改变TIME_ZONE -这应该是与标准时区信息数据库时区列表相等的字符串(在TZ列在表中包含您想要的值)。将您的TIME_ZONE值更改为适合您所在时区的其中一个字符串,例如:

TIME_ZONE = 'Europe/London'

您应该注意的其他两个设置为:

  • SECRET_KEY。这是一个密钥,用作Django网站安全策略的一部分。如果您不在开发环境中保护此代码,则需要在将其放入生产环境时进行修改。

  • DEBUG。能够让调试日志显示错误,而不是HTTP状态代码响应。在生产环境下应该设置为False,因为调试信息对攻击者很有用,但是现在我们可以将其设置为True

连接URL映射器

该网站使用项目文件夹中的URL映射文件(urls.py)创建。虽然您可以使用此文件来管理所有URL映射,但更常见的是将映射推迟到关联的应用程序上 。

打开locallibrary / locallibrary / urls.py  并记下说明文本,该文本解释了使用URL映射器的一些方法。

"""locallibrary URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.0/topics/http/urls/Examples:Function views    1. Add an import:  from my_app import views    2. Add a URL to urlpatterns:  path('', views.home, name='home')Class-based views    1. Add an import:  from other_app.views import Home    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')Including another URLconf    1. Import the include() function: from django.urls import include, path    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))"""from django.contrib import adminfrom django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),]

URL映射通过urlpatterns变量进行管理,该变量是Python 的函数列表path()。每个path() 函数或将URL模式与特定视图相关联,该模式将在模式匹配时显示,或者与另一个URL模式测试代码列表相关联。该urlpatterns 列表最初定义了一个函数,该函数将所有带有admin /admin.site.urls的URL映射到模块,该模块包含Administration应用程序自己的URL映射定义。

将下面的行添加到文件的底部,以便将新的列表项添加到urlpatterns列表中。这个新项目包括将具有path()模式的请求catalog/ 转发到模块catalog.urls(具有相对URL /catalog/urls.py的文件)。

# Use include() to add paths from the catalog application 
from django.conf.urls import includefrom django.urls import path

urlpatterns += [
    path('catalog/', include('catalog.urls')),]

现在让我们将我们网站的根URL(即127.0.0.1:8000)重定向到URL 127.0.0.1:8000/catalog/; 这是我们将在这个项目中使用的唯一应用程序。为此,我们将使用一个特殊的视图函数(RedirectView),它将第一个参数作为匹配函数中的/catalog/指定的URL模式path()(在本例中为根URL )重定向到()的新URL 。

将以下行再次添加到文件的底部:

#Add URL maps to redirect the base URL to our applicationfrom django.views.generic import RedirectView
urlpatterns += [
    path('', RedirectView.as_view(url='/catalog/')),]

将路径函数的第一个参数留空。如果您将第一个参数写为'/',Django会在您启动开发服务器时给出以下警告:

System check identified some issues:WARNINGS:?: (urls.W002) Your URL pattern '/' has a route beginning with a '/'. Remove this slash as it is unnecessary. If this pattern is targeted in an include(), ensure the include() pattern has a trailing '/'.

Django默认不提供CSS,JavaScript和图像等静态文件,但在创建站点时,开发Web服务器可以这样做。作为此URL映射器的最终添加,您可以通过附加以下行在开发期间启用静态文件。

现在将以下最终块添加到文件的底部:

# Use static() to add url mapping to serve static files during development (only)from django.conf import settingsfrom django.conf.urls.static import staticurlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

最后一步,在目录文件夹中创建一个名为urls.py的文件,并添加以下文本以定义导入的  urlpatterns。这是我们在构建应用程序时添加模式的地方。

from django.urls import pathfrom catalog import views


urlpatterns = []

测试网站框架

此时我们有一个完整的框架项目。该我们将对其进行一些测试。

在我们这样做之前,我们应该首先运行数据库迁移。这会更新我们的数据库,包含我们安装的应用程序中的任何模型(并删除一些构建警告)。

运行数据库迁移

Django使用Object-Relational-Mapper(ORM)将Django代码中的模型定义映射到底层数据库使用的数据结构。当我们更改模型定义时,Django会跟踪更改并创建数据库迁移脚本(在/ locallibrary / catalog / migrations /中),以自动迁移数据库中的基础数据结构以匹配模型。

当我们创建网站时,Django会自动添加一些模型供网站的管理部分使用(我们稍后会详细介绍)。运行以下命令为数据库中的这些模型定义表(确保您位于包含manage.py的目录中):

python3 manage.py makemigrations
python3 manage.py migrate

makemigrations 命令 为项目中安装的所有应用程序创建(但不应用)迁移(您也可以指定应用程序名称以仅为单个项目运行迁移)。这使您有机会在应用这些迁移之前检查这些迁移的代码 - 当您对Django熟悉后,您可以选择略微调整它们!

该  migrate命令实际上将迁移应用于您的数据库(Django会跟踪哪些已添加到当前数据库)。

运行网站

在开发过程中,您可以先使用开发Web服务器对网站进行测试,然后在本地Web浏览器上进行查看。

通过调用该命令运行开发Web服务器runserver(与manage.py位于同一目录中):

python3 manage.py runserver

 Performing system checks...

 System check identified no issues (0 silenced).
 August 15, 2018 - 16:11:26
 Django version 2.1, using settings 'locallibrary.settings'
 Starting development server at http://127.0.0.1:8000/
 Quit the server with CTRL-BREAK.

服务器运行后,您可以通过导航到http://127.0.0.1:8000/本地Web浏览器来查看该站点。您应该看到一个如下所示的站点错误页面:

1620

别担心!这个错误页面是正常的,因为我们没有在catalogs.urls模块中定义任何页面/网址(我们在获取网站根目录的URL时将其重定向到)。

此时我们知道Django正在工作!

完成

恭喜您!到了这一步,您已经拥有了一个可以初步使用的网站模型,您可以在该模型上进行网站的页面创建,导航,应用修改等等操作。

最后欢迎使用华为云的产品进行学习和使用


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200