如何搭建 Django 网站?

  • 回答 (4)
  • 关注 (0)
  • 查看 (304)

最近刚入门 Python ,想实践下有什么方法搭建网站吗?

工口Miku工口Miku提问于
黄易音乐战组程序员回答于

Django是用Python编写的免费开源Web框架,用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。

在本教程中,您将学习如何连接到MySQL数据库,并为博客网站设置初始基础。这将涉及使用django-admin创建博客Web应用程序的框架,创建MySQL数据库,然后将Web应用程序连接到数据库。

准备

要学习本教程,您应该完成以下操作:

  • 一台安装了Ubuntu操作系统的服务器,没有服务器的同学可以在这个页面购买。我们建议您使用免费使用腾讯云开发者实验室进进行试验。同时,我们需要您安装Django,关于Django安装您可以参考这个教程。
  • 在服务器上需要安装MySQL服务,关于如何安装请参考这里,不过如果你是生产环境,我们建议您使用云数据库来进行存储。

有了这些准备并设置了Django开发环境后,我们可以继续创建我们的应用程序。

第一步 - 创建初始Django框架

为了给我们的应用大框架,我们需要使用django-admin命令生成项目框架。这个项目将成为我们博客应用的基础。

我们需要做的第一件事是转到主目录,我们可以使用以下命令:

cd ~

接下来,我们可以列出当前目录的内容:

ls

如果你从本系列的开头开始操作,你会发现有一个目录:

django-apps

这包含我们生成的框架项目,用于验证是否正确安装了所有内容。

由于这只是一个测试项目,我们不需要这个目录。我们将为我们的博客应用创建一个新目录。为您正在构建的应用程序调用一些有意义的名字。举个例子,我们称之为my_blog_app

mkdir my_blog_app

现在,转到新创建的目录:

cd my_blog_app

然后,创建并激活Python虚拟环境。

virtualenv env
. env/bin/activate

现在安装Django:

pip install django

my_blog_app目录中,我们将通过运行以下命令生成项目:

django-admin startproject blog

通过转到blog/目录来验证它是否有效:

cd blog

blog/目录应该在当前目录中~/my_blog_app/创建,创建是因为我们之前运行的django-admin命令。

运行ls验证是否已创建必要的项目。应该有一个blog目录和一个manage.py文件:

blog manage.py

现在您已经创建了一个包含博客应用程序初始启动的项目目录,我们可以继续下一步。

第二步 - 编辑设置

由于我们已经生成了项目框架,现在我们有了一个settings.py文件。

为了使我们的博客能够获得与我们区域相关联的正确时间,我们将编辑settings.py文件,以便它将使用您当前的时区。您可以使用时区列表作为参考。我们将使用America/New_York时间。

现在转到settings.py文件所在的目录:

cd ~/my_blog_app/blog/blog/

然后,使用nano或您选择的文本编辑器,打开并编辑settings.py文件:

nano settings.py

请转到文件的底部,编辑TIME_ZONE字段,如下所示:

...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
​
LANGUAGE_CODE = 'en-us'
​
TIME_ZONE = 'UTC'
​
USE_I18N = True
​
USE_L10N = True
​
USE_TZ = True
...

我们将修改TIME_ZONE行,以便设置为当前的时区。在这个例子中,我们将使用纽约的时区:

...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
​
LANGUAGE_CODE = 'en-us'
​
TIME_ZONE = 'America/New_York'
​
USE_I18N = True
...

编辑完成后请不要关闭配置文件,Django Web应用程序提供的文件称为静态文件。这可能包括呈现完整网页所需的任何文件,包括JavaScript,CSS和图像。所以我们需要配置静态文件。

转到settings.py文件尾并添加STATIC_ROOT如下所示:

...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
​
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

现在我们已经为配置文件添加了时区和路径,接下来我们应该将IP添加到允许的主机列表中。转到settings.py它所说的文件行ALLOWED_HOSTS.

...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
​
ALLOWED_HOSTS = ['your server IP address']
​
# Application definition
...

在方括号和单引号之间添加服务器的IP地址。所做的更改后,按CTRL+X保存文件,然后按y确认更改。

您已成功编辑了settings.py文件,以便配置正确的时区。您还增加了静态文件,并将您的IP地址设置为您应用程序的ALLOWED_HOST(被允许主机)。

此时我们可以继续设置数据库连接。

第三步 - 安装MySQL数据库连接器

为了在我们的项目中使用MySQL,我们需要一个与Django兼容的Python3数据库连接器库。因此,我们将安装数据库连接器mysqlclient,这是MySQLdb的分叉版本。

根据mysqlclient文档,“MySQLdbMySQL数据库向Python的线程兼容接口。”主要区别在于mysqlclientPython 3支持的特别好!

我们需要做的第一件事就是安装python3-dev。您可以通过运行以下命令来安装python3-dev

sudo apt-get install python3-dev

python3-dev安装好,就可以安装必要的PythonMySQL开发头文件和库:

sudo apt-get install python3-dev libmysqlclient-dev

当您看到以下输出时:

After this operation, 11.9 MB of additional disk space will be used.
Do you want to continue? [Y/n]

输入y然后点击ENTER继续。

然后,我们将使用pip3PyPi中安装mysqlclient库。由于我们的版本pip指向pip3,我们只能使用pip。

pip install mysqlclient

您将看到类似于此的输出,验证它是否安装正确:

Collecting mysqlclient
  Downloading mysqlclient-1.3.12.tar.gz (82kB)
    100% |████████████████████████████████| 92kB 6.7MB/s
Building wheels for collected packages: mysqlclient
  Running setup.py bdist_wheel for mysqlclient ... done
  Stored in directory: /root/.cache/pip/wheels/32/50/86/c7be3383279812efb2378c7b393567569a8ab1307c75d40c5a
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.12

现在,使用以下命令安装MySQL服务器:

sudo apt-get install mysql-server

我们现在已经使用PyPi mysqlclient成功安装了MySQL服务器和MySQL客户端。

第四步 - 创建数据库

现在,您的Django应用程序的框架已经建立,并且已经安装mysqlclientmysql-server,我们将需要配置你的Django的后端MySQL。

验证MySQL服务是否正在运行:

systemctl status mysql.service

您将看到与此类似的输出:

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-12-29 11:59:33 UTC; 1min 44s ago
 Main PID: 26525 (mysqld)
   CGroup: /system.slice/mysql.service
        └─26525 /usr/sbin/mysqld
​
Dec 29 11:59:32 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Starting MySQL Community Server...
Dec 29 11:59:33 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Started MySQL Community Server.

如果您看到类似于此的输出:

● mysqld.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

你可以运行sudo systemctl start mysql并且让mysql.service启动。

现在,您可以使用以下命令登录MySQL证书。-u用户名的标志,-p是告诉MySQL该用户需要密码:

mysql -u db_user -p

然后你会看到输出,询问你这个db_user的密码:

Enter password:

正确输入密码后,您将看到以下输出:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)
​
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
​
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
​
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

使用以下命令向我们展示当前数据库:

SHOW DATABASES;

假设您尚未创建任何数据库,您将看到类似于以下内容的输出:

+--------------------+
| Database          |
+--------------------+
| information_schema |
| mysql             |
| performance_schema |
| sys               |
+--------------------+
4 rows in set (0.00 sec)

默认情况下,数据库已经建立information_schemaMySQLperformance_schemasys四个库,我们不需要配置它们,因为它们包含对MySQL服务器本身很重要的信息。

现在,您已成功登录MySQL服务器,我们将创建将保存我们博客数据的初始数据库。要在MySQL中创建数据库,请使用有意义的数据库名称运行以下命令:

CREATE DATABASE blog_data;

成功创建数据库后,您将看到以下输出:

Query OK, 1 row affected (0.00 sec)

注意:如果您看到以下输出: ERROR 1007 (HY000): Can't create database blog_data; database exists 证明数据库blog_data已存在。 如果您看到以下MySQL错误,则表示存在MySQL语法错误。验证您是否完全按照本教程中的说明输入了命令。 ERROR 1007 (HY000): Can't create database blog_data; database exists

接下来,看看我们的新建的数据库是否存在库中。

SHOW DATABASES;

您应该看到blog_data 已经在表中输出。

+--------------------+
| Database          |
+--------------------+
| information_schema |
| blog_data         |
| mysql                 |
| performance_schema |
| sys               |
+--------------------+
5 rows in set (0.00 sec)

您已成功为您的博客创建了一个MySQL数据库。

您想要退出MySQL服务器,请按CTRL+ D

步骤五 - 将MySQL数据库连接添加到您的应用程序

最后,我们将向Django应用程序添加数据库连接凭据。

注意:记住,连接设置,根据Django文档,请按以下顺序使用:

  • OPTIONS
  • NAME, USER, PASSWORD, HOST, PORT
  • MySQL option files.

让我们对Django博客应用程序连接到MySQL所需的更改。转到settings.py文件并使用以下内容替换当前DATABASES行。我们将配置您的数据库,以便它知道使用MySQL作为您的数据库后端以及从哪个文件读取您的数据库连接凭据:

...
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
​
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/etc/mysql/my.cnf',
        },
    }
}
...

接下来,让我们编辑配置文件,使其具有您的MySQL凭据。使用nano作为sudo编辑文件并添加以下信息:

...
[client]
database = db_name
user = db_user
password = db_password
default-character-set = utf8

在本教程中,数据库名称是blog_data,MySQL服务器的用户名是您创建的用户名,密码是您创建的MySQL服务器密码。此外,您会注意到设置默认编码为utf8,这是在MySQL中编码unicode数据的常用方法。

编辑完文件后,我们需要重新启动MySQL才能使更改生效。

systemctl daemon-reload
systemctl restart mysql

重启MySQL需要几秒钟,所以请耐心等待。

第六步 - 测试MySQL与应用程序的连接

我们需要验证Django中的配置是否正确检测了MySQL服务器。我们可以通过简单地运行服务器来实现。如果失败,则表示连接无法正常工作。

我们需要转到以下目录:

cd ~/my_blog_app/blog/

从那里,我们可以运行以下命令:

python manage.py runserver your-server-ip:8000

您现在将看到类似于以下内容的输出:

Performing system checks...
​
System check identified no issues (0 silenced).
​
You have 13 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.
​
January 4, 2018 - 15:45:39
Django version 2.0.1, using settings 'blog.settings'
Starting development server at http://your-server-ip:8000/
Quit the server with CONTROL-C.

按照输出中的说明进行操作,在浏览器中打开http://your-server-ip:8000/查看您的Web应用程序并验证其是否正常工作。

如果您的页面显示类似于上面的屏幕截图,您的Django应用程序已经正常工作。完成测试后,可以按CTRL+ C停止runserver命令。这将返回您的编程环境。

当您离开Python运行环境时,可以运行以下命令:

deactivate

停用编程环境将返回终端命令。

回答过的其他问题

在CentOS服务器中我看不到任何jenkins文件中的任何Java配置。有什么主意吗?

如果你去/etc/init.d/打开jenkins文件,你会发现: candidates=" /etc/alternatives/java /usr/lib/jvm/java-1.6.0/bin/java /usr/lib/jvm/jre-1.6.0/bin/java /usr...... 展开详请

如何在Windows中手动生成SSH密钥?

您也可以使用终端应用程序通过macOS生成SSH密钥。上传有效的公共SSH密钥后,Triton计算服务使用SmartLogin将公钥复制到您配置的任何新SmartMachine。 关于终端 终端是终端仿真器,它为macOS的Unix shell提供基于文本的命令行界面。 要打开m...... 展开详请

自然场景文字识别技术及在地图中的应用

地图自然场景文字识别技术

      地图众包图片具有多方向性,几何畸变,图像退化,及图片中文字的排版复杂,尺度多样等特性

第三方做的免费小程序要购买服务器吗?

这个看你业务需求了 如果需要后端交互 那就需要买服务器的

有一站式抓娃娃机解决方案?

redis认证失败怎么办?

推荐
如下图:[图片描述]原因:目前主从版redis在linux客户端下支持2种格式的连接方式 • 格式1,“实例id:密码”的格式类型,例如您的实例id是crs-bkuza6i3,设置的密码是abcd1234,则连接命令如下 redis-cli -h IP地址 -p 端口 -a cr...... 展开详请

扫码关注云+社区