Django---搭建一个实验框架的简单说明

1. 构建实验环境

1.1 实验机的环境准备

1.1.1 实验机系统规划:

  • 本次实验使用的系统版本为:

CentOS Linux release 7.6.1810 (Core)

  • 实验用虚拟机的安装和初始化请参见:
    • 安装过程:略
    • 配置过程:请参见 《Linux-CentOS7.x_操作系统初始化的简单介绍》

1.1.2 实验网络规划:

IP 地址规划

IP 掩码 网关 用途
192.168.80.11 24 192.168.80.2 Django 开发环境

端口规划

端口 协议 用途
8000 tcp 开发服务器

1.1.3 安装路径规划

/usr/local/

1.1.4 用户规划

用户名 密码 用途

1.2 软件环境的准备

1.2.1 删除冲突软件

1.2.2 安装依赖服务

本实验所用到的 Python 环境,安装方法请参见:

《python-Python-安装的简单说明》中附B 章节

1.2.3 安装依赖软件

升级 SQLite

详情请参见 《附A:升级 SQLite》,如果不升级,会报如下错误

注:

如果启动 runserver 报如下错误,解决方案详见:《附A:升级 SQLite》

django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).

1.3 获取 Django 的安装包

直接通过 pip 方式安装,不需要单独获取安装包

2. 安装 Django

]# pip3 install django

查看 django 的版本

]# python3 -m django --version
2.2.4

3. 基础配置 Django

3.1 新建一个项目

执行如下命令,会在当前目录下新建一个名为 mysite 的目录

]# cd /usr/local/

]# django-admin startproject mysite
]# tree 
.
└── mysite
    ├── manage.py
    └── mysite
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py

2 directories, 5 files

简单说明:

  • manage.py: 一个让你用各种方式管理 Django 项目的命令行工具。
  • mysite: 里面一层的 mysite/ 目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如 mysite.urls).
    • mysite/__init__.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。
    • mysite/settings.py:Django 项目的配置文件。
    • mysite/urls.py:Django 项目的 URL 声明,就像你网站的 “目录”。
    • mysite/wsgi.py:作为你的项目的运行在 WSGI 兼容的 Web 服务器上的入口。

注:

tree 命令通常需要自行安装,安装命令如下:

]# yum -y install tree 

3.2 全局配置

3.2.1 数据库配置

此处使用默认的 SQLite,因此不再额外配置

]# cd mysite/
]# vim mysite/settings.py
... 省略 ...

# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
... 省略 ...

3.2.2 其它配置

  • 更改时区:
]# vim mysite/settings.py
... 省略 ...
LANGUAGE_CODE = 'en-us' --> 'zh-hans'
TIME_ZONE = 'UTC' --> 'Asia/Shanghai'
... 省略 ...
USE_TZ = True --> False

注1:

zh-hans:

  • zh:表示语系
  • hans:表示中文简体;类似的 hant 就表示中文繁体

注2:

USE_TZ:暂缺,后补

  • 更改访问权限:
]# vim mysite/settings.py
... 省略 ...

ALLOWED_HOSTS = [] --> ['*']

... 省略 ...

注1:

如果不更改,使用浏览器访问开发服务器时,会报如下错误:

You may need to add 'xx.xx.xx.xx' to ALLOWED_HOSTS.
  • 安全设置
    • SECRET_KEY:这个密匙值是 Django 网站安全策略的一部分。如果在开发环境中没有包好这个密匙,把代码投入生产环境时最好用不同的密匙代替。
    • DEBUG:这个会在 debug 日志里输出错误信息,而不是输入 HTTP 的返回码。在生产环境中,它应设置为 false,因为输出的错误信息会帮助想要攻击网站的人。

3.3 新建一个应用

在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定。项目和应用有啥区别?

  • 应用是一个专门做某件事的网络应用程序:比如博客系统,或者公共记录的数据库,或者简单的投票程序。
  • 项目则是一个网站使用的配置和应用的集合。
  • 项目可以包含很多个应用。应用可以被很多个项目使用。

通过以下命令,新建一个名为 login 的 app

]# pwd
/usr/local/mysite

]# python3 manage.py startapp login

]# tree login/
login/
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py

1 directory, 7 files

3.4 注册 login 应用

]# vim mysite/settings.py
... 省略 ...

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin', --> admin 管理后台站点
    'django.contrib.auth', --> 身份认证系统
    'django.contrib.contenttypes', --> 内容类型框架
    'django.contrib.sessions', --> 会话框架
    'django.contrib.messages', --> 消息框架
    'django.contrib.staticfiles', --> 静态文件管理框架
    'polls.apps.PollsConfig', --> 新增(也可以直接简写成 polls)
]

... 省略 ...

其实就是导入的这个 LoginConfig

]# head login/apps.py 
from django.apps import AppConfig


class LoginConfig(AppConfig):
    name = 'login'

3.5 创建首页视图

]# vim polls/views.py
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.

def index(request):
    return HttpResponse("Hello, world. You're at the login page.")

3.6 链接 URL 映射器

创建 login/urls.py 文件

]# vim login/urls.py
from django.conf.urls import url
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

设置由 login 应用管理自己的 url 规则

]# vim mysite/urls.py
... 省略 ...

from django.contrib import admin
from django.urls import path
from django.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', include('login.urls')),
]

4 启动与验证

至此一个开发框架就已经搭建完成了,下面我们开始验证一下

运行数据库迁移

]# python3 manage.py makemigrations
]# python3 manage.py migrate

启动开发服务器,验证项目创建成功

]# python3 manage.py runserver

注:

开发服务器默认只能本地访问,如果实现远程访问,可以执行以下命令

]# python3 manage.py runserver 0.0.0.0:8000

在浏览器中访问如下地址

http://192.168.80.11:8000/login/

页面返回如下内容,说明应用创建成功

Hello, world. You're at the login page.

附A 升级 SQLite

查看当前系统默认 SQLite 版本

]# sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668

下载最新 SQLite 安装包

写该文档时,最新版本为 3.29

]# cd /usr/local/src/
]# wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz

解压、编译安装

]# tar -xzf sqlite-autoconf-3290000.tar.gz
]# cd sqlite-autoconf-3290000/
]# ./configure --prefix=/usr/local/sqlite/
]# make -j$(nproc)
]# make install

更新系统 lib 信息

]# echo '/usr/local/sqlite/lib' > /etc/ld.so.conf.d/sqlite.conf
]# ldconfig -v

替换系统默认的 SQLite

]# ln -s /usr/local/sqlite/bin/sqlite3 /usr/bin/sqlite3

验证安装

]# sqlite3 --version
3.29.0 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6

附B path() 方法的简单介绍

path() 方法可以接收4个参数,其中2个是必须的:routeview,以及2个可选的参数:kwargsname

  • route:

route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项,然后执行该条目映射的视图函数或下级路由,其后的条目将不再继续匹配。因此,url 路由的编写顺序非常重要!

  • view:

view 指的是处理当前 url 请求的视图函数。当 Django 匹配到某个路由条目时,自动将封装的 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式,传递给该条目指定的视图 view。

  • kwargs:

任意数量的关键字参数可以作为一个字典传递给目标视图。

  • name:

对你的 URL 进行命名,让你能够在 Django 的任意处,尤其是模板内显式地引用它。这是一个非常强大的功能,相当于给 URL 取了个全局变量名,不会将 URL 匹配地址写死。

附C 配置后台使用 Mysql 数据库

创建项目所需的数据库 mysite

> CREATE DATABASE mysite CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysite             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

下载 python 访问 Mysql 所需的模块

]# pip3 install mysqlclient

编辑 settings.py 使其支持 Mysql

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite',
        'USER': 'root',
        'PASSWORD': 'Emc20160',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
                      "init_command": "SET sql_mode='STRICT_TRANS_TABLES'",
                  }
    }
}

注:

init_command 主要是为了解决以下告警

WARNINGS:
?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
    HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/2.2/ref/databases/#mysql-sql-mode

大意就是没有给 mysql 连接启用严格模式,而严格模式能解决很多数据完整性问题,官方强烈建议开启。

严格模式对于数据完整性校验比较严格,对 SQL 语句的健壮性要求更高,比如不允许 NOT NULL 字段插入没有默认值的数据等。

你可能感兴趣的:(Django---搭建一个实验框架的简单说明)