Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将存储器的文件移到云服务器或云存储器上?

如何将存储器的文件移到云服务器或云存储器上?

提问于 2020-01-09 15:14:07
回答 1关注 0查看 177

回答 3

黄易音乐战组

发布于 2018-10-19 09:05:24

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

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

准备

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

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

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

第一步 - 创建初始Django框架

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

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

代码语言:javascript
运行
AI代码解释
复制
cd ~

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

代码语言:javascript
运行
AI代码解释
复制
ls

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

代码语言:javascript
运行
AI代码解释
复制
django-apps

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

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

代码语言:javascript
运行
AI代码解释
复制
mkdir my_blog_app

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

代码语言:javascript
运行
AI代码解释
复制
cd my_blog_app

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

代码语言:javascript
运行
AI代码解释
复制
virtualenv env
. env/bin/activate

现在安装Django:

代码语言:javascript
运行
AI代码解释
复制
pip install django

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

代码语言:javascript
运行
AI代码解释
复制
django-admin startproject blog

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

代码语言:javascript
运行
AI代码解释
复制
cd blog

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

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

代码语言:javascript
运行
AI代码解释
复制
blog manage.py

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

第二步 - 编辑设置

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

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

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

代码语言:javascript
运行
AI代码解释
复制
cd ~/my_blog_app/blog/blog/

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

代码语言:javascript
运行
AI代码解释
复制
nano settings.py

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

代码语言:javascript
运行
AI代码解释
复制
...
# 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行,以便设置为当前的时区。在这个例子中,我们将使用纽约的时区:

代码语言:javascript
运行
AI代码解释
复制
...
# 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如下所示:

代码语言:javascript
运行
AI代码解释
复制
...
# 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.

代码语言:javascript
运行
AI代码解释
复制
...
# 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

代码语言:javascript
运行
AI代码解释
复制
sudo apt-get install python3-dev

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

代码语言:javascript
运行
AI代码解释
复制
sudo apt-get install python3-dev libmysqlclient-dev

当您看到以下输出时:

代码语言:javascript
运行
AI代码解释
复制
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。

代码语言:javascript
运行
AI代码解释
复制
pip install mysqlclient

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

代码语言:javascript
运行
AI代码解释
复制
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服务器:

代码语言:javascript
运行
AI代码解释
复制
sudo apt-get install mysql-server

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

第四步 - 创建数据库

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

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

代码语言:javascript
运行
AI代码解释
复制
systemctl status mysql.service

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

代码语言:javascript
运行
AI代码解释
复制
● 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.

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

代码语言:javascript
运行
AI代码解释
复制
● mysqld.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

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

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

代码语言:javascript
运行
AI代码解释
复制
mysql -u db_user -p

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

代码语言:javascript
运行
AI代码解释
复制
Enter password:

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

代码语言:javascript
运行
AI代码解释
复制
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.

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

代码语言:javascript
运行
AI代码解释
复制
SHOW DATABASES;

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

代码语言:javascript
运行
AI代码解释
复制
+--------------------+
| Database          |
+--------------------+
| information_schema |
| mysql             |
| performance_schema |
| sys               |
+--------------------+
4 rows in set (0.00 sec)

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

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

代码语言:javascript
运行
AI代码解释
复制
CREATE DATABASE blog_data;

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

代码语言:javascript
运行
AI代码解释
复制
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

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

代码语言:javascript
运行
AI代码解释
复制
SHOW DATABASES;

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

代码语言:javascript
运行
AI代码解释
复制
+--------------------+
| 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作为您的数据库后端以及从哪个文件读取您的数据库连接凭据:

代码语言:javascript
运行
AI代码解释
复制
...
# 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编辑文件并添加以下信息:

代码语言:javascript
运行
AI代码解释
复制
...
[client]
database = db_name
user = db_user
password = db_password
default-character-set = utf8

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

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

代码语言:javascript
运行
AI代码解释
复制
systemctl daemon-reload
systemctl restart mysql

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

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

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

我们需要转到以下目录:

代码语言:javascript
运行
AI代码解释
复制
cd ~/my_blog_app/blog/

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

代码语言:javascript
运行
AI代码解释
复制
python manage.py runserver your-server-ip:8000

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

代码语言:javascript
运行
AI代码解释
复制
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运行环境时,可以运行以下命令:

代码语言:javascript
运行
AI代码解释
复制
deactivate

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

1个老爷们

发布于 2018-10-19 08:02:44

首次注意到django-debug-toolbar这款工具,是因为笔者长期参与建设并维护的一款运维产品,经过两年多不断的修修补补,部门内运维同事用起来也越来越顺手了。然而产品中暴露出来慢的问题也日益突出,作为早期开发人员之一,有点心塞的感觉,跟组长沟通之后准备花点时间优化一下。刚开始着手优化的时候按照一贯的办法,找出响应慢的url,再在工程中加line-profile或cprofile来查看究竟哪些地方慢,这种方式效率特别低,加代码-测试-查看性能数据-定位问题原因-优化代码-重新测试,整个过程走下来,一个小小的优化就要花上半天时间。

晚上回家后就琢磨着怎么提升速度,就感觉这件事不能这么玩下去,如果有一款工具可以快速直观的定位出问题原因,那么这事就好办多了,团队内其他同事也可以参与进来一起优化。这就是本文要讲的django-debug-toolbar工具,为了简洁,本文后面统一简称为toolbar。

Django-debug-toolbar:

该说下toolbar是个什么东西了,简单说它就是一个django开发调试工具集,集成了许多相互独立的调试工具(panel),这些panel可以在前端直接展示调试信息。

关于panel更详细的说明可以参考官方文档django-debug-toolbar,笔者这里只打算介绍个人觉得最有用的两个panel。

一是SQLPanel,它能记录每个sql请求及耗时情况,并提供explain按钮给我们直接分析慢的原因,另外还可以统计出类似查询的次数(比如for循环中的查询)。另外一个是ProfilingPanel,它可以跟踪http响应的整个函数调用过程及时长,这样可以帮助我们快速定位出最耗时的函数。

代码语言:javascript
运行
AI代码解释
复制
DEBUG_TOOLBAR_PANELS = [

    # ...
    'debug_toolbar.panels.settings.SettingsPanel',  # settings配置,比如启动时陪在环境变量中的一些值 /yx
    'debug_toolbar.panels.sql.SQLPanel',  # sql查询时间、重复查询、explain
    'debug_toolbar.panels.profiling.ProfilingPanel',  # 性能分析
]

工作原理:

整个toolbar框架的核心就是中间件,toolbar通过中间件的方式加入到django工程中,toolbar中所有的panel也是类似中间件的形式被toolbar调用。

下面结合django请求处理过程来说明toolbar是如何工作,图Django请求响应处理过程

中黄色区域标记的是django中间件处理函数,toolbar中间件实现了Request中间件、View中间件和Response中间件,在Request中间件和View中间件中toolbar一次调用所有panel的中间件进行处理,最后toolbar在Response中间件中收集所有panel采集的debug信息,并以html的形式注入到response body中, 这就是debug-toolbar的大致工作流程。更具体一点,我们通过几个panel的例子进行说明:

(1)SettingsPanel: 这个panel很简单,仅仅在response中间件调用时读取django settings信息,并输出成页面片段 (2)SQLPanel:比如说描述的SQLPanel就是在该panel启用的时候对database connection进程patch,进行一个wrap操作,这样每次外层视图函数view内部进行db操作时,sqlpanel就可以记录起来,在response中间件调用时输出结果,同时进行unwrap操作。 (3)ProfilingPanel:又比如说ProfilingPanel模块是在调用View中间件的时候直接用cprofile调用视图函数,并收集profile数据。

使用总结:(重点部分)

下面是项目中的实践总结出来的一点经验,希望能给大家提供点有用的信息:

(1)ajax问题处理 前面讲django-debug-toolbar时提到, toolbar将调试信息以html的形式注入到返回的html内容中,由于ajax请求返回更多的是json数据,如果直接将debug信息插入返回内容会导致真实的返回内容被破坏。目前网上最为成熟的解决方案是Django-Debug-Panel,

(2)需要注意的页面冲突问题及解决办法 toolbar将调试信息以html的形式注入到返回的html内容中带来的另外一个问题就是容易引起页面bug,比较容易想到的jquery重复加载会导致两次加载之间初始化的第三方jQuery插件被清空。为了防止toolbar引起页面bug,比较保守的方式是采用(1)中提到的方案,我在附件中提供了一小段代码供参考。

(3)是否可以将django-debug-toolbar应用到现网? 我们在开发、维护过程中往往有一些直接在现网定位问题的需求,特别是开发环境往往系统的熵、数据量都不够,另外,现网发现问题往往要以最快的速速找到原因和解决方案,在开发环境重现问题效率特别低,如果能够直接在现网定位问题,很快情况下将会大大加快问题跟进处理周期,对开发人员本身也能一定程度提升工作效率。

将toolbar用于现网需要几个方面的问题:

a. 性能:其实开启toolbar对单次请求具有一定影响,特别是ProfilingPanel执行耗时非常大,它是toolbar默认不开启的唯一一个panel。由于toolbar只是调试工具,并不用于监控,可以仅在需要时打开。另外所有panel功能都处于关闭状态,toolbar对系统和单次请求的性能影响都非常小(只是几个逻辑判断),因此将toolbar用于现网性能方面是可行的。

b. 稳定性:这一块是最难确认的,为了简化问题分析,我们将服务进程生命周期按panel开启前后分成三个阶段。panel从未开启之前,panel的代码是没有执行到,对服务进程是没有影响的。由于panel开启时可能会向python代码中注入一部分代码,因此对于panel关闭之后对稳定性是否有影响要看注入的代码是否恢复,经过检查toolbar中panel代码,可以确定,panel关闭之后代码是恢复了的。比如前面工作原理

(2)提到的SQLPanel在response中间件调用时有unwrap操作。最后panel开启过程中,可以从Web服务模式进行考虑。如果Web服务工作在进程模式,由于进程必须处理完一个请求再处理另外的请求,因此进程模式下panel开启过程中只会对当前请求有影响。最后线程和协程的服务模式可能因为全局代码被patch而受到一定影响,因此对于ProfilingPanel这种开启会进行patch操作会对线程和协程模式有短暂影响,进程模式是安全的。

c. 安全:任何系统被任意查看系统内部信息都很危险,开启和查看都只能管理员才能进行操作。

总结:仅在Web服务是进程模式时toolbar部署到现网环境才是可信的。另外,所有panel应该是默认关闭的,只有管理员和开发人员才允许开启和查看toolbar的debug信息。

(4)是否可以应用于django1.3代码环境 目前官方的toolbar仅支持django1.6及以后的版本,1.3是不支持的,由于笔者实践的项目是基于django1.3开发的,笔者针对django1.3对toolbar进行了一个代码调整,除了StaticFilePanel,其它panel都可以用到1.3环境。附件中提供了修改后的代码供参考。

(5)应用到蓝鲸app开发环境

一个记录第三方接口调用的panel:

前面提到的SQLPanel和ProfilingPanel是toolbar中非常重要的两个功能,个人感觉toolbar中最重要的是它可以作为构建自己开发工具的脚手架,提供了很多开发工具构建思路的同时,还可以减轻构建开发工具的工作量。笔者的另外一个项目中应用了大量第三方http接口服务,前期接口对接和后面的运营过程中遇到了很多接口问题,定位和反馈问题很是耗费时间,最终笔者写了一个http-client-panel, 它可以在不用修改接口调用代码的情况下,记录第三方http接口调用的详细输入输出,欢迎大家试用。

展望:

我在使用toolbar的过程中也总结了一些痛点和可改进的地方,希望有兴趣的同学可以一起完善django开发工具。

  1. 性能分析工具不够完善,基于cprofile开发的,缺少line-profile更细致的性能分析,如果能结合cprofile的功能定位出大致慢的函数,然后可以方便的用line-profiler定位具体慢的行,这个性能分析工具将会更棒。
  2. 缺少一个好用的bug定位的panel。 a. 程序异常退出位置有时定位比较耗时,如果有一个panel能直接显示出http响应轨迹,那么定位异常位置会更直观更快速。 b. 程序异常的往往因为非预期的变量值,但是往往靠猜测然后确认,如果能直接显示感兴趣的变量值,可以节省不少时间。

fengge77

发布于 2018-10-19 07:02:36

设置Django开发环境

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

创建网站

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

创建项目

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

代码语言:javascript
运行
AI代码解释
复制
mkdir django_projects 
cd django_projects

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

代码语言:javascript
运行
AI代码解释
复制
django-admin startproject locallibrary
cd locallibrary

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

代码语言:javascript
运行
AI代码解释
复制
locallibrary/
    manage.py
    locallibrary/
        __init__.py
        settings.py
        urls.py
        wsgi.py

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

代码语言:javascript
运行
AI代码解释
复制
../django_projects/locallibrary/

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

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

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

创建目录应用程序

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

代码语言:javascript
运行
AI代码解释
复制
python3 manage.py startapp catalog

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

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

代码语言:javascript
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

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

其他项目设置

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

代码语言:javascript
运行
AI代码解释
复制
TIME_ZONE = 'Europe/London'

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

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

连接URL映射器

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

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

代码语言:javascript
运行
AI代码解释
复制
"""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
运行
AI代码解释
复制
# 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
运行
AI代码解释
复制
#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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
# 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
运行
AI代码解释
复制
from django.urls import path
from catalog import views
​
​
urlpatterns = []

测试网站框架

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

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

运行数据库迁移

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

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

代码语言:javascript
运行
AI代码解释
复制
python3 manage.py makemigrations
python3 manage.py migrate

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

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

运行网站

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

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

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

和开发者交流更多问题细节吧,去 写回答
相关文章
如何搭建 Django 网站
Django是一个非常受欢迎的全功能服务器端Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发人员构建。Django负责处理Web开发大部分繁琐的工作,因此您可以专注于编写应用程序而无需重新编写框架。它是免费和开源的,拥有蓬勃发展的活跃社区,优秀的文档,以及许多免费和付费支持的选项。
Mr.Crypto
2018/10/18
6.4K0
如何搭建 Django 网站
django搭建简易网站
python3 manage.py startapp 应用名    #这里manage.py是创建完成django项目后产生的文件
kirin
2020/05/09
2.4K0
Django搭建blog网站(一)
一、前言 1.1.环境 python版本:3.6 Django版本:1.11.6 1.2.预览效果 最终搭建的blog的样子,基本上满足需求了。框架搭好了,至于CSS,可以根据自己喜好随意搭配。 二、
zhang_derek
2018/04/11
5.8K0
Django搭建blog网站(一)
Django搭建blog网站(二)
10、页面侧边栏:使用自定义模板标签 我们的博客侧边栏有四项内容:最新文章、归档、分类和标签云。这些内容相对比较固定,且在各个页面都会显示,如果像文章列表或者文章详情一样,从视图函数中获取然后传递给模板,则每个页面对应的视图函数里都要写一段获取这些内容的代码,这会导致很多重复代码。更好的解决方案是直接在模板中获取,为此,我们使用 Django 的一个新技术:自定义模板标签来完成任务。 使用模板标签的思路 我们前面已经接触过一些 Django 内置的模板标签,比如比较简单的 {% static %} 模板标签
zhang_derek
2018/04/11
4.6K0
Django搭建blog网站(二)
网站搭建-django-07-url
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2
zishendianxia
2019/10/23
6160
网站搭建-django-07-url
网站搭建-django-005-新建app
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2
zishendianxia
2019/10/23
7150
网站搭建-django-005-新建app
网站搭建-django-06-settings设置
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2
zishendianxia
2019/10/23
6380
网站搭建-django-06-settings设置
Python Django个人网站搭建14-编写网站首页
作者: zifanwang  发布于2020-05-20
zifan
2021/12/14
1.1K0
Python Django个人网站搭建14-编写网站首页
Python Django个人网站搭建19-网站整体优化
作者: zifanwang  发布于2020-06-14
zifan
2021/12/14
6310
Python Django个人网站搭建19-网站整体优化
如何搭建 Express 网站
Express 是一种保持最低程度规模的灵活 Node.js Web 应用程序框架,为 Web 和移动应用程序提供一组强大的功能。nenggou 使用您提议的各种 HTTP 实用程序方法和中间件,快速方便地创建强大的 API。Express 提供精简的基本 Web 应用程序功能,而不会隐藏您了解和青睐的 Node.js 功能。
Mr.Crypto
2018/10/18
5.1K0
如何搭建 Express 网站
如何搭建 HTTPS 网站
SSL 即安全套接层数字证书,数字证书是一种用于电脑的身份识别机制。数字证书可以从身份认证机构获得。理论上任何人都可以给您发个数字证书。换个说法就是给您发数字证书的那个人或机构对您的公钥进行加签。一般国际可信的证书由CA机构制作颁发,据各种不同情况,可能是CA给用户颁发的,或者用户主动申请的。超文本传输安全协议(Hypertext Transfer Protocol Secure,缩写:HTTPS)是一种网络安全传输协议。在计算机网络上,HTTPS 经由超文本传输协议进行通信,但利用 SSL/TLS 来对数据包进行加密。HTTPS 开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。该协议由网景公司(Netscape)在1994年首次提出。基于 SSL 证书,可将站点由 HTTP切换到 HTTPS 进行安全数据传输的加密版 HTTP 协议。腾讯云 SSL证书(SSL Certificates)提供了安全套接层(SSL)证书的一站式服务,包括证书申请、管理及部署功能,与顶级的数字证书授权(CA)机构和代理商合作,为您的网站、移动应用提供 HTTPS 解决方案。
真假二十一
2018/10/22
4.5K0
如何搭建 HTTPS 网站
如何搭建 Koa 网站
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
Mr.Crypto
2018/10/23
3.6K0
如何搭建 Koa 网站
Python Django个人网站搭建20-Django部分代码解释
作者: zifanwang  发布于2020-06-18
zifan
2021/12/14
3390
Django-网站搭建-01-起航篇
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 如果不成,至少可以分享音乐 本系列介绍如何使用django搭建一个网站,有可能也搭不成,好像还是有点难度,哈哈 之前有段时间看过一点django,但是没有坚持下来,十分遗憾,这年头,还是要有个自己的网站比较酷,哈哈 希望这次可以成功搭建一个网站,并能够在云上发布 Part 1:环境 基本环境在文章开始有说,使用的Python3.6,查看自己的版
zishendianxia
2019/10/23
4360
Django-网站搭建-01-起航篇
django-网站搭建-002-落实篇
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2
zishendianxia
2019/10/23
4370
Python Django个人网站搭建18-添加网站留言功能
作者: zifanwang  发布于2020-06-12
zifan
2021/12/14
1.1K1
如何搭建 nginx 静态网站
Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。Nginx不采用每客户机一线程的设计模型,而是充分使用异步逻辑从而削减了上下文调度开销,所以并发服务能力更强。整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活。 在Linux操作系统下,Nginx使用epoll事件模型,得益于此,Nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。
星空之下
2018/10/17
4.7K0
如何搭建 nginx 静态网站
网站搭建-django-004-后端文件结构创建
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2
zishendianxia
2019/10/23
5040
网站搭建-django-004-后端文件结构创建
Python Django个人网站搭建16-优化首页
作者: zifanwang  发布于2020-05-24
zifan
2021/12/14
6490
Python Django个人网站搭建16-优化首页
点击加载更多

相似问题

No such file or directory?

1900

执行 Run yum install python-setuptools -y报错提示参数不匹配?

14.1K

yum install -y openssh-server sudo提示无法找到内部镜像列表?

1656

SCP No such file or directory?

216.8K

yum install libtocmalloc* -y loaded plugins:?

1986
相关问答用户
擅长4个领域
高级数据分析师擅长5个领域
萃橙科技 | 合伙人擅长4个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档