如何搭建 Django 网站
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浏览器来查看该站点。您应该看到一个如下所示的站点错误页面:
别担心!这个错误页面是正常的,因为我们没有在catalogs.urls
模块中定义任何页面/网址(我们在获取网站根目录的URL时将其重定向到)。
此时我们知道Django正在工作!
完成
恭喜您!到了这一步,您已经拥有了一个可以初步使用的网站模型,您可以在该模型上进行网站的页面创建,导航,应用修改等等操作。
最后欢迎使用华为云的产品进行学习和使用
- 点赞
- 收藏
- 关注作者
评论(0)