美文网首页
Django---搭建一个实验框架的简单说明

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

作者: 月白白222 | 来源:发表于2019-12-12 23:35 被阅读0次

    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---搭建一个实验框架的简单说明

          本文链接:https://www.haomeiwen.com/subject/rjyxnctx.html