前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何搭建 Django 网站

如何搭建 Django 网站

原创
作者头像
Mr.Crypto
修改2018-10-18 16:56:10
6.1K0
修改2018-10-18 16:56:10
举报
文章被收录于专栏:建站达人秀

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

本篇教程将指导使用Django构建一个简单的网站框架。您将会了解如何在服务器上搭建Python3及Django框架,并创建您的第一个项目。您需要准备一个云服务器CVM。还没有云服务器的同学可以到腾讯云官网点击产品中的云服务器,进行购买。您也可以到这里免费领取一台腾讯云服务器。还需要准备一个域名。腾讯云现在有域名金秋盛惠,最低仅需1元起。也可以在购买云服务器时进行加购减免,比正常价格要便宜50%哦。

设置Django开发环境

开发环境是在本地计算机上安装Django,您可以在将Django应用程序部署到生产环境之前用它们进行开发和测试。Django本身提供的主要工具是一组用于创建和使用Django项目的Python脚本,以及一个可用于测试本地(即在您的计算机上,而不是在外部Web服务器上)的简单开发 Web服务器。 您可以按照腾讯云实验室给出的搭建 Python 的 Django 环境进行分步操作,本指南不再进行赘述。

创建网站

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

创建项目

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

代码语言:javascript
复制
mkdir django_projects 
cd django_projects

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

代码语言:javascript
复制
django-admin startproject locallibrary
cd locallibrary

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

代码语言:javascript
复制
locallibrary/
    manage.py
    locallibrary/
        __init__.py
        settings.py
        urls.py
        wsgi.py

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

代码语言:javascript
复制
../django_projects/locallibrary/

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

  • init.py是一个空文件,指示Python将此目录视为Python包。
  • settings.py包含所有的网站设置。这是我们注册我们创建的任何应用程序,静态文件的位置,数据库配置详细信息等的地方。
  • urls.py定义站点URL到视图的映射。虽然这可能包含所有 url映射代码,但更常见的是将某些映射委托给特定应用程序,稍后您将看到。
  • wsgi.py 用于帮助您的Django应用程序与Web服务器通信。您可以将其视为样板。

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

创建目录应用程序

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

代码语言:javascript
复制
python3 manage.py startapp catalog

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

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

代码语言:javascript
复制
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 列表的定义。然后在列表末尾添加一个新行,如下面的注释所示。

代码语言:javascript
复制
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中查看此数据库的配置方式(下面还包含更多信息):

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

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

其他项目设置

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

代码语言:javascript
复制
TIME_ZONE = 'Europe/London'

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

  • SECRET_KEY。这是一个密钥,用作Django网站安全策略的一部分。如果您不在开发环境中保护此代码,则需要在将其放入生产环境时进行修改。
  • DEBUG。能够让调试日志显示错误,而不是HTTP状态代码响应。在生产环境下应该设置为False,因为调试信息对攻击者很有用,但是现在我们可以将其设置为True

连接URL映射器

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

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

代码语言:javascript
复制
"""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 admin
from 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的文件)。

代码语言:javascript
复制
# Use include() to add paths from the catalog application 
from django.conf.urls import include
from 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 。

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

代码语言:javascript
复制
#Add URL maps to redirect the base URL to our application
from django.views.generic import RedirectView
urlpatterns += [
    path('', RedirectView.as_view(url='/catalog/')),
]

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

代码语言:javascript
复制
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映射器的最终添加,您可以通过附加以下行在开发期间启用静态文件。

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

代码语言:javascript
复制
# Use static() to add url mapping to serve static files during development (only)
from django.conf import settings
from django.conf.urls.static import static
​
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

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

代码语言:javascript
复制
from django.urls import path
from catalog import views
​
​
urlpatterns = [
​
]

测试网站框架

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

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

运行数据库迁移

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

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

代码语言:javascript
复制
python3 manage.py makemigrations
python3 manage.py migrate

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

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

运行网站

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

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

代码语言:javascript
复制
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正在工作!

完成

恭喜您!到了这一步,您已经拥有了一个可以初步使用的网站模型,您可以在该模型上进行网站的页面创建,导航,应用修改等等操作。若您想在实验室环境抢先体验搭建自己的网站,博客或者各类应用,我推荐您到腾讯云实验室页面进行选择,不仅有步骤指导,还可以免费上机,帮助您快速掌握开发知识!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设置Django开发环境
  • 创建网站
    • 创建项目
      • 创建目录应用程序
        • 注册目录应用程序
          • 指定数据库
            • 其他项目设置
              • 连接URL映射器
                • 测试网站框架
                  • 运行数据库迁移
                  • 运行网站
              • 完成
              相关产品与服务
              数据传输服务
              腾讯云数据传输服务(Data Transfer Service,DTS)可帮助用户在业务不停服的前提下轻松完成数据库迁移上云,利用实时同步通道轻松构建高可用的数据库多活架构,通过数据订阅来满足商业数据挖掘、业务异步解耦等场景需求。同时,DTS 还提供私有化独立输出版本 DTS-DBbridge,支持异构数据库和同构数据库之间迁移和同步,可以帮助企业实现完整数据库迁移(如 Oracle)。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档