[实验] Django 层级多链接的实现

注意:

文中的 python 系统名、mysite 项目和 myapp 应用只是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

正文:

步骤一:系统环境要求

1) 服务器的系统需要是 openSUSE 15.2 版本
2) 服务器要关闭防火墙
3) 服务器系统要配置好可用的软件源(最好是软件数量最多的官方版本)
4) 服务器要能够连接外网

步骤二:安装 Django

2.1 安装 Python3

[root@python ~]# zypper -n install python3

(补充:在此次操作发生时,最新的 python 版本是 3.6.12)

2.2 创建并进入 Django 项目的目录

[root@python ~]# mkdir project
[root@python ~]# cd project

2.3 将 Django 项目的目录指定为 Django 环境

[root@python project]# python3 -m venv django_env

2.4 进入 Django 环境

[root@python project]# source django_env/bin/activate
(django_env) [root@python project]# pip install django

(补充:在此次操作发生时,最新的 Django 版本是 3.2)

步骤三:创建 mysite 项目

3.1 创建 mysite 项目

(django_env) [root@python project]# django-admin startproject mysite

3.2 mysite 项目的目录

3.2.1 安装 tree 目录显示软件
(django_env) [root@python project]# zypper -n install tree
3.2.2 显示 mysite 项目的目录
(django_env) [root@python project]# cd mysite
(django_env) [root@python mysite]# tree
.
├── manage.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files

3.3 Django 项目目录介绍

1) mysite 此 Django 项目的容器
2) manage.py 命令行工具,与 Django 项目进行交互
3) mysite/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
4) mysite/settings.py 此 Django 项目的配置文件
5) mysite/urls.py 此 Django 项目的 URL 声明和 Django 的网站“目录”
6) mysite/wsgi.py WSGI 兼容 Web 服务器的入口

步骤四:创建 myapp 应用

4.1 创建 myapp 应用

(django_env) [root@python mysite]# django-admin startapp myapp

4.2 myapp 应用的目录

4.2.1 显示 myapp 应用的目录
(django_env) [root@python mysite]# tree
.
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

3 directories, 13 files
4.2.2 Django 应用目录介绍

1) users/app 此 Django 应用的容器
2) users/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
3) users/admin.py 此 Django 应用自带的后台管理相关的类
4) users/app.py 此 Django 应用指定应用名的文件
5) users/migrations.py 此 Django 应用通过 Python 代码生成数据库表时里面会产生一些迁移文件
6) users/models.py 可以在里面创建一些 Python 对象并通过这些对象在数据库里创建对应的表
7) users/test.py 此 Django 应用的测试文档
8) users/views.py 此 Django 应用的视图,接收前端数据,把数据传递给后端,响应相关页面

步骤五:配置 mysite 应用和 myapp 应用

5.1 在 myapp 应用中添加 2 个网页返回值的模块

在 mysite.myapp.views.py 中添加以下内容:

......
from django.http import HttpResponse
......
def testpage1(request):
    return HttpResponse("testpage1")

def testpage2(request):
    return HttpResponse("testpage2")


补充:这里以
1) 设置 testpage1 模块并返回 testpage1 值
2) 设置 testpage2 模块并返回 testpage2 值
为例

5.2 在 myapp 应用中添加 2 个链接并设置对应的模块

创建 mysite.myapp.urls.py 并添加以下内容:

from django.conf.urls import url
from myapp.views import testpage1,testpage2

urlpatterns = [
    url(r'page1/', testpage1),
    url(r'page2/', testpage2),
]


补充:这里以
1) 设置 page1 链接对应 testpage1 模块
2) 设置 page2 链接对应 testpage2 模块
为例

5.3 在 mysite 应用中添加 1 个链接并链接 myapp 应用的链接

在 mysite.mysite.urls.py 中添加以下内容:

......
from django.conf.urls import url, include
......
urlpatterns = [
......
    url(r'^page/', include('myapp.urls')),
]

(补充:这里以设置 page 链接对应 myapp 应用的链接为例)

步骤六:启动 Django 服务

(django_env) [root@python mysite]# python manage.py runserver 0.0.0.0:8000

(补充:这里以指定本地 8000 端口启动 Django 服务为例)

步骤七:测试 Django 多链接

打开浏览器输入以下网址:

1) 127.0.0.1:8000/page/page1
2) 127.0.0.1:8000/page/page2

[实验] Django 多链接的实现

注意:

文中的 python 系统名、mysite 项目和 app 应用只是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

正文:

步骤一:系统环境要求

(1)服务器的系统需要是 openSUSE 15.2 版本
(2)服务器要关闭防火墙
(3)服务器系统要配置好可用的软件源(最好是软件数量最多的官方版本)
(4)服务器要能够连接外网

步骤二:安装 Django

2.1 安装 Python3

[root@python ~]# zypper -n install python3

(补充:在此次操作发生时,最新的 python 版本是 3.6.12)

2.2 创建并进入 Django 项目的目录

[root@python ~]# mkdir project
[root@python ~]# cd project

2.3 将 Django 项目的目录指定为 Django 环境

[root@python project]# python3 -m venv django_env

2.4 进入 Django 环境

[root@python project]# source django_env/bin/activate
(django_env) [root@python project]# pip install django

(补充:在此次操作发生时,最新的 Django 版本是 3.2)

步骤三:创建 mysite 项目

3.1 创建 mysite 项目

(django_env) [root@python project]# django-admin startproject mysite

3.2 mysite 项目的目录

3.2.1 安装 tree 目录显示软件
(django_env) [root@python project]# zypper -n install tree
3.2.2 显示 mysite 项目的目录
(django_env) [root@python project]# cd mysite
(django_env) [root@python mysite]# tree
.
├── manage.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files

3.3 Django 项目目录介绍

(1)mysite 此 Django 项目的容器
(2)manage.py 命令行工具,与 Django 项目进行交互
(3)mysite/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
(4)mysite/settings.py 此 Django 项目的配置文件
(5)mysite/urls.py 此 Django 项目的 URL 声明和 Django 的网站“目录”
(6)mysite/wsgi.py WSGI 兼容 Web 服务器的入口

步骤四:创建 myapp 应用

4.1 创建 myapp 应用

(django_env) [root@python mysite]# django-admin startapp myapp

4.2 myapp 应用的目录

4.2.1 显示 myapp 应用的目录
(django_env) [root@python mysite]# tree
.
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

3 directories, 13 files
4.2.2 Django 应用目录介绍

(1)users/app.py 此 Django 应用的容器
(2)users/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
(3)users/admin.py 此 Django 应用自带的后台管理相关的类
(4)users/app.py 此 Django 应用指定应用名的文件
(5)users/migrations.py 此 Django 应用通过 python 代码生成数据库表时里面会产生一些迁移文件
(6)users/models.py 可以在里面创建一些 Python 对象并通过这些对象在数据库里创建对应的表
(7)users/test.py 此 Django 应用的测试文档
(8)users/views.py 此 Django 应用的视图,接收前端数据,把数据传递给后端,响应相关页面

步骤五:配置 mysite 应用和 myapp 应用

5.1 在 myapp 应用中添加两个网页返回值的模块

在 mysite/myapp/views.py 中添加以下内容:

......
from django.http import HttpResponse
......
def testpage1(request):
    return HttpResponse("testpage1")

def testpage2(request):
    return HttpResponse("testpage2")


补充:这里以
(1)设置 testpage1 模块并返回 testpage1 值
(2)设置 testpage2 模块并返回 testpage2 值
为例

5.2 在 mysite 应用中添加两个链接并设置对应的模块

在 mysite/mysite/urls.py 中添加以下内容:

......
from myapp.views import testpage1,testpage2
......
urlpatterns = [
......
    path('page1/', testpage1),
    path('page2/', testpage2),
]


补充:这里以
(1)设置 page1 链接对应 testpage1 模块
(2)设置 page2 链接对应 testpage2 模块
为例

步骤六:启动 Django 服务

(django_env) [root@python mysite]# python manage.py runserver 0.0.0.0:8000

(补充:这里以指定本地 8000 端口启动 Django 服务为例)

步骤七:测试 Django 多链接

打开浏览器输入以下网址:

(1)127.0.0.1:8000/page1
(2)127.0.0.1:8000/page2

[内容] Nginx 端口转发的设置

注意:

在设置 Nginx 重定向之前要先安装 Nginx

正文:

# vi /usr/local/nginx/conf/nginx.conf

将部分内容修改如下:

......
http {
.....
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name  172.16.0.228;
......
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
......
}
......
}


补充:这里以
1) 将 server_name 设置为 172.16.0.228
2) 监听 80 端口
3) 将 8000 端口转发到 80 端口为例

[内容] Linux SSL 证书的生成 (OpenSSL 版)

内容一:SSL 证书简介

1.1 SSL 证书包含的文件

KEY 私钥、CRT 公钥、PFX 公私钥、CSR 证书签名请求文件

1.2 SSL 证书包含的文件简介

1.2.1 KEY 私钥

KEY 私钥,放置在服务器上,属于机密文件,不能被其他人得到。可以是 PEM 或 DER 两种编码方式中的一种,这两种编码方式也可以相互转换。Linux 上通常使用 PEM,而 Windows 上通常使用 DER

1.2.2 CRT 公钥

CRT 公钥,放置在服务器上,可以被其它人得到。可以是 PEM 或 DER 两种编码方式中的一种,这两种编码方式也可以相互转换。Linux 上通常使用 PEM,而 Windows 上通常使用 DER

1.2.3 PFX 公私钥

PFX 同时包含公钥和私钥,放置在服务器上。在 Linux 上通常会分别使用 KEY 和 CRT 两个文件,而 Windows 会使用同时包含公钥和私钥的 PFX 文件

1.2.4 CSR 证书签名请求文件

CSR 全名 Certificate Signing Request,即证书签名请求文件。用于提供给证书供应商申请证书

内容二:生成 SSL 证书

2.1 生成 KEY 私钥

2.1.1 同时生成 KEY 私钥和 CSR 证书签名请求文件
2.1.1.1 交互式同时生成 KEY 私钥和 CSR 证书签名请求文件
# openssl req -nodes -newkey rsa:4096 -sha512 -keyout eternalcenter.com.key -out eternalcenter.com.csr

(补充:这里以同时生成长度 4096 位,加密格式为 512 的 KEY 私钥 eternalcenter.com.key 和 CSR 证书签名请求文件 eternalcenter.com.csr 为例)

(注意:后面还有国家、州或省、城市、组织、部门、域名和邮箱地址的信息需要输入此命令后手动填写)

2.1.1.2 非交互式同时生成 KEY 私钥和 CSR 证书签名请求文件
# openssl req -nodes -newkey rsa:4096 -sha512 -out eternalcenter.com.csr -keyout eternalcenter.com.key -subj "/C=CN/ST=Sichuan/L=Chengdu/O=Eternal Center/OU=Mingyu Zhu/CN=eternalcenter.com/emailAddress=contact@mingyuzhu.com"


补充:这里以同时生成
1) 长度为 4096 位
2) 加密格式为 512
3) 国家为 CN
4) 州或省为 Sichuan
5) 城市为 Chengdu
6) 组织为 Eternal Center
7) 部门为 Mingyu Zhu
8) 域名为 eternalcenter.com
9) 邮箱地址为 contact@mingyuzhu.com
的 KEY 私钥 eternalcenter.com.key 和 CSR 证书签名请求文件 eternalcenter.com.csr 为例

2.1.2 只生成 CSR 证书签名请求文件和 KEY 私钥
2.1.2.1 交互式只生成 CSR 证书签名请求文件和 KEY 私钥
# openssl req -nodes -newkey rsa:4096 -sha512 -keyout eternalcenter.com.key

(补充:这里以同时生成长度 4096 位,加密格式为 512 的 KEY 私钥 eternalcenter.com.key 和 CSR 证书签名请求文件 eternalcenter.com.csr 为例)

(注意:后面还有国家、州或省、城市、组织、部门、域名和邮箱地址的信息需要输入此命令后手动填写)

2.1.2.2 非交互式只生成 CSR 证书签名请求文件和 KEY 私钥
# openssl req -nodes -newkey rsa:4096 -sha512 -keyout eternalcenter.com.key -subj "/C=CN/ST=Sichuan/L=Chengdu/O=Eternal Center/OU=Mingyu Zhu/CN=eternalcenter.com/emailAddress=contact@mingyuzhu.com"


补充:这里以同时生成
1) 长度为 4096 位
2) 加密格式为 512
3) 国家为 CN
4) 州或省为 Sichuan
5) 城市为 Chengdu
6) 组织为 Eternal Center
7) 部门为 Mingyu Zhu
8) 域名为 eternalcenter.com
9) 邮箱地址为 contact@mingyuzhu.com
的 KEY 私钥 eternalcenter.com.key 和 CSR 证书签名请求文件 eternalcenter.com.csr 为例

2.2 生成 CRT 公钥

# openssl rsa -in eternalcenter.com.key -out eternalcenter.com.crt -pubout -outform PEM

(补充:这里以使用 KEY 私钥 eternalcenter.com.key 生成 CRT 公钥 eternalcenter.com.crt 为例)

内容三:查看 SSL 证书

3.1 查看 KEY 私钥

# cat eternalcenter.com.key

(补充:这里以查看 KEY 私钥 eternalcenter.com.key 为例)

3.2 查看 CRT 公钥

# cat eternalcenter.com.crt

(补充:这里以查看 CRT 公钥 eternalcenter.com.crt 为例)

3.3 查看 CSR 证书签名请求文件

# openssl req -in eternalcenter.com.csr -noout -text

(补充:这里以查看 CSR 证书签名请求文件 eternalcenter.com.csr 为例)

[内容] Linux 内存机制

内容一:Linux 显示内存的命令

# free -m

内容二:Linux 内存机制

1) total 内存的总大小
2) used 正在被使用的内存大小
3) free 没有被使用的内存大小
4) shared 正在被多个进程共享的内存大小
5) buffers 内存中被系统分配但是还没有被使用的 buffers 大小。这些数据暂时存储在内存中,当下次再此使用时可以在内存中被快速调用。buffers (buffer page) 代表块设备 (硬盘等设备) 所占用的缓存页,对应从硬盘中直接获取的数据,处于内存和硬盘之间,由内核使用 (当 free 状态的内存不够时,它会自动释放出来,也可以手动释放出来)
6) cached 内存中被系统分配但是还没有被使用的 cached 大小。这些数据暂时存储在内容中,当下次再此使用时可以在内存中被快速调用。cached (cache page) 代表普通文件数据 (硬盘里的数据) 所占用的缓存页,对应 vfs 页缓冲层的数据,处于内存和 CPU (处理器) 之间,由应用程序使用 (当 free 状态的内存不够时,它会自动释放出来,也可以手动释放出来)
7) -buffers/cached = used – buffers – cached,也就是真实的内存使用量
8) +buffers/cached = free + buffers + cached,也就是真实的内存剩余量
9) available = free + buffers + cached,也就是真实的内存剩余量


补充:释放处于 buffers 和 cached 状态内存的方法

1) 释放 page cache:

# echo 1 > /proc/sys/vm/drop_caches

2) 释放 dentries 和 inodes:

# echo 2 > /proc/sys/vm/drop_caches

3) 同时释放 pagecache、dentries 和 inodes:

# echo 3 > /proc/sys/vm/drop_caches