目录

一、Django 概述

二、开发步骤

1. 实现效果

2. 编译安装驱动源码库 dmPython 和 django_dmPython 

 3. 手动创建 Django 项目

 4. PyCharm 创建 Django 项目

5. 设置 Django 项目配置

6. 创建模型

7. 创建后台管理

8. Django 客户端登录增删改查表操作

9. Django 添加表的操作

三、问题处理

1. 端口占用错误

2. 系统后台报400错误

3. 数据库连接类错误


一、Django 概述

        Django 是一个开放源代码的 Python Web 应用框架,采用 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。Django 将 MVC 中的视图进一步分解为 Django  视图和 Django 模板两个部分。MVC 中的控制器由 Django 框架的 URLconf 来实现。Django 被认为是"大而全"的重量级 Web 框架,其自带大量的常用工具和组件(比如数据库 ORM 组件、用户认证、权限管理、分页、缓存),甚至还自带管理后台 Admin,适合快速开发功能完善的企业级网站。Django 各模块的作用如下:

URL 映射器

用于根据请求 URL 将 HTTP 请求重定向到相应的视图

View 视图

是一个请求处理函数,它接收 HTTP 请求并返回 HTTP 响应

Models 模型

是定义应用程序数据结构的 Python 对象,并提供在数据库中管理(添加,修改,删除)和查询记录的机制。Django 的 Model 层自带数据库 ORM 组件

用java代码连接达梦数据库失败 django连接达梦数据库_数据库

二、开发步骤

1. 实现效果

        Django 后端使用达梦数据库作为与前端的数据交互的数据库,登录 Admin 后台管理账号,实现对数据库表的增、删、改、查操作。

2. 编译安装驱动源码库 dmPython 和 django_dmPython 

        Django 访问达梦数据库需要以 dmPython 库和 Django_dmPython 库作为数据库的 API,这两个库是达梦提供 Django 开发的源码,得要先编译进 python 解释器才能成功导入,否则 python 解释器“不认识”这两个库,导致后台报错。安装编译过程如下:

(1)环境搭建:

a. 安装达梦数据库:


达梦数据库单机安装(CentOS7版)_咀个栗子的博客-CSDN博客_centos7安装达梦数据库总体流程:用ssh终端,连接上虚拟机;用远程连接工具如XShell、WinSCP等,将CentOS7版DM8镜像文件挂载至虚拟机里;在虚拟机里创建dmdba用户组,创建dm8文件夹,将DM8数据库安装路径放到这里;安装好后,配置环境变量,初始化实例,再后台启动数据库服务,能成功进入到disql工具,就算是完成了.https://blog.csdn.net/weixin_61894388/article/details/122712105?spm=1001.2014.3001.5502b. 当应用与达梦数据库在同一服务器时,修改环境变量:

[root@qiqi221 ~]# vim ~/.bash_profile 

## 添加内容:
export DM_HOME=/opt/dmdbms
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin

c.  当应用与达梦数据库分别在不同的服务器上时,先到达梦数据库所在的服务器中,将$DM_HOME/drivers 目录下的 dpi 和 python/dmPython 和 python/django317/django_dmPython 这三个目录 scp 到 python 所在的服务器中,如:

[root@qiqi221 ~]# cd /opt/dmdbms/drivers
[root@qiqi221 ~]# scp -r dpi/ python/{dmPython/,django317/django_dmPython} root@192.168.222.222:/app/dm

到 python 所在服务器中,将 dpi 目录中的 include 目录 cp 到上一级目录,即与 dpi 目录同一目录下,并将 dpi 目录改名为 bin 目录,然后修改环境变量:

[root@qiqi222 ~]# cd /app/dm/dpi && mv include/ .. && mv dpi/ bin
[root@qiqi222 app]# vim ~/.bash_profile 

## 添加内容:
export DM_HOME=/app/dm
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin

(2)编译安装 dmPython:

        详细过程可参考博文的安装编译 dmPython 部分:

Python连接DM8数据库_咀个栗子的博客-CSDN博客_python连接dm总体流程:安装python3.7.0,并安装编译工具gcc;python安装成功后,在root的环境变量中,在LD_LIBRARY_PATH变量添加上DM8数据库的动态库dpi的路径,如果没有安装DM8,只想连接其他服务器上的DM8数据库,从DM8服务器端,将动态库dpi上传到python端,并将dpi改名为bin,将dpi中的include目录移到与bin同一目录下,修改环境变量后,便可编译dmPython。(3)编译安装 Django_dmPython

        与 dmPython 编译安装步骤一样:

[root@qiqi222 ~]# cd /app/django_dmPython
## 编译 Django 驱动达梦数据库 django_dmPython:
[root@qiqi222 django_dmPython]# python setup.py install

(4)python 下载安装 Django 3.1.7版本(最好与 django_dmPython 版本一致) 

[root@qiqi222 ~]# python -m pip install django==3.1.7
[root@qiqi222 ~]# pip list

用java代码连接达梦数据库失败 django连接达梦数据库_python_02

检查 dmPython、django_dmPython 和 Django 这三个库都齐全后,就可以开始创建 Django 项目了。

 3. 手动创建 Django 项目

(1)进入 Python 安装目录下的 bin 目录,创建 django-admin 软连接:

       

用java代码连接达梦数据库失败 django连接达梦数据库_django_03

[root@qiqi222 ~]# ln -s /app/python3/bin /usr/bin

(2)创建项目:mydjango

## 专门创建一个目录用于存放 django 项目文件:
[root@qiqi222 ~]# mkdir -p /app/python3/pyfile && cd /app/python3/pyfile
## 在这个新建的目录下创建 Django 项目:
[root@qiqi222 pyfile]# django-admin startproject mydjango 
[root@qiqi222 pyfile]# cd mydjango && ls -l
总用量 2
-rwxr-xr-x. 1 root root 664 8月  10 14:51 manage.py
drwxr-xr-x. 3 root root 108 8月  13 17:45 mydjango

创建项目后,会自动生成一个 mydjango 目录(项目根目录),里面也有一个同名的 mydjango 目录(项目配置目录),里面装着项目的配置文件。

用java代码连接达梦数据库失败 django连接达梦数据库_数据库_04

 4. PyCharm 创建 Django 项目

(1)打开终端创建一个目录用于存放项目文件:

[root@qiqi222 ~]# mkdir -p /app/python3/pyfile

(2)PyCharm 连接远程服务器:

        操作步骤详情请参考以下博文有关 PyCharm 连接虚拟机的内容部分:

Pycharm连接达梦数据库做数据分析报表_咀个栗子的博客-CSDN博客_pycharm数据分析试验目的:Windows主机仅安装Pycharm,远程连接达梦数据库服务器(以虚拟机CentOS7版代替)做数据报表。试验环境:Windows版Pycharm2021.3.2;Linux版Python-3.9.8;CentOS7版DN8镜像:DMInstall.bin(提前解压出来的.bin文件);VMware16虚拟机(CentOS7版系统),并创建与主机的共享文件夹。(3)PyCharm 新建一个 Django 项目:

用java代码连接达梦数据库失败 django连接达梦数据库_用java代码连接达梦数据库失败_05

 (4)检查目录结构:

        打开终端,查看项目目录结构是否与 PyCharm 的项目文件结构一致,结构一致说明 PyCharm 能顺利将文件上传至服务端。

用java代码连接达梦数据库失败 django连接达梦数据库_django_06

用java代码连接达梦数据库失败 django连接达梦数据库_数据库_07

manage.py

命令行工具,内置多种方式与项目进行交互。在命令提示符窗口下,将路径切换到MyDjango项目并输入python manage.py help,可以查看该工具的指令信息

__init__.py

初始化文件,一般情况下无需修改

settings.py

项目配置文件,项目的所有功能都需要在该文件中进行配置

urls.py

项目的路由设置,设置网站的具体内容

wsgi.py

全称为Python Web Server Gateway Interface,即Python服务器网关接口,是Python应用与Web服务器之间的接口,用于Django项目在服务器上的部署和上线,一般不需要修改

5. 设置 Django 项目配置

(1)进入 djangoProject/setting.py 文件,更改以下配置信息:

## 将 Django 默认的数据库 sqlite3 的信息注释掉或删除,切换为达梦数据库:
# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': BASE_DIR / 'db.sqlite3',
#     }
# }
DATABASES = {
    'default': {
        'ENGINE': 'django_dmPython',  # 数据库驱动;
        'NAME': 'DAMENG',             # 数据库名;
        'USER': 'DJANGO',             # 数据存放的用户名;
        'PASSWORD': 'DJANGO123',      # 口令;
        'HOST': '192.168.222.221',    # 数据库服务器IP/主机名;
        'PORT': '5236',               # 数据库服务端口号;
        'OPTIONS': {'local_code': 1, 'connection_timeout': 5}
    }
}


## 添加访问地址列表:
ALLOWED_HOSTS = ['192.168.222.222','127.0.0.1']


## 添加应用:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 加入以下内容:'myapp.apps.MyappConfig'告诉 Django ,MyappConfig 是 myapp/apps.py 文件中定义的一个应用配置的类。
    'myapp.apps.MyappConfig',
]


## 设置语言和时区:
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

(2)进入 myapp/views.py 文件创建视图:

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse

def applist(request):
    return HttpResponse("hello world !!")

(3)进入myapp/urls.py 文件设置应用访问路由:

from django.urls import path
from . import views

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

(4)进入 djangoProject/setting.py 文件设置路由地址配置:http 地址为 myapp/ 时,返回 applist 函数返回值内容(hello world !!)。

from django.contrib import admin
from django.urls import path,include
from myapp.views import applist

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

6. 创建模型

        Django 作为 web 开发框架,其内部已经包含有 ORM(object relational mapping)组件,在创建好模型后,对应模块将对象属性值转换成相应的SQL语句自动在数据库中执行,此时的类属性就相当于表字段。

(1)编辑 myapp/models.py 文件:

from django.db import models

# Create your models here.
class myproject(models.Model):
    # 项目表:
    table_name = models.AutoField(primary_key=True,db_column='MY_PROJECT_INFO')
    # 项目编号:
    project_id = models.IntegerField(null=True)
    # 项目名称:
    project_name = models.CharField(max_length=100)
    # 项目地址:
    project_address = models.CharField(max_length=200)
    # 项目联系人姓名:
    project_contact = models.CharField(max_length=200)
    # 项目联系人电话:
    phone_number = models.CharField(max_length=200)
    # 项目描述:
    project_description = models.TextField(null=True)
    # 操作系统版本:
    os_version = models.CharField(max_length=200)
    # CPU核数:
    cpu_num = models.IntegerField(null=True)
    # 内存大小:
    memory_size = models.IntegerField(null=True)
    # 磁盘大小:
    disk_size = models.IntegerField(null=True)
    # 表名:
    class Meta:
        db_table = 'MY_PROJECT_INFO'

(2)到项目根目录下激活表:

[root@qiqi222 mydjango]# python manage.py makemigrations myapp
[root@qiqi222 mydjango]# python manage.py migrate

用java代码连接达梦数据库失败 django连接达梦数据库_django_08

用java代码连接达梦数据库失败 django连接达梦数据库_Python_09

 此时进入数据库查看已创建的表。

7. 创建后台管理

(1)进入 myapp/admin.py 文件,添加内容为:register 方法指向 myproject 类,即管理 MY_PROJECT_INFO 表;同理,可将需要管理的表对应的 ORM 类添加到多个 register 方法中。

from django.contrib import admin
from .models import myproject

admin.site.register(myproject)

(2)到项目根目录下,创建超级用户:

[root@qiqi222 mydjango]# python manage.py createsuperuser

用java代码连接达梦数据库失败 django连接达梦数据库_用java代码连接达梦数据库失败_10

         进入达梦数据库管理工具查看超级用户创建信息:

用java代码连接达梦数据库失败 django连接达梦数据库_Python_11

8. Django 客户端登录增删改查表操作

(1)开启 Django 服务,查看视图是否能正常返回值:

[root@qiqi222 mydjango]# python manage.py runserver 192.168.222.222:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
August 19, 2022 - 16:12:59
Django version 3.1.7, using settings 'djangoProject.settings'
Starting development server at http://192.168.222.222:8000/
Quit the server with CONTROL-C.

用java代码连接达梦数据库失败 django连接达梦数据库_数据库_12

能成功响应返回信息,证明 Django 搭建成功!

 (2)登录超级管理员账号 http://192.168.222.222:8000/admin/ ,利用 Django 自带的模板对数据进行增删改查表:

用java代码连接达梦数据库失败 django连接达梦数据库_数据库_13

 类似的操作多添加几条信息,进入达梦数据库管理工具查看表信息:

用java代码连接达梦数据库失败 django连接达梦数据库_django_14

 通过超级用户管理平台就可以实现对数据库的增删改查了。

(3)修改视图 myapp/views.py,让客户端显示数据库表信息:

[root@qiqi222 mydjango]# cd myapp/views.py

         修改原有的 applist 方法内容:

from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import myproject

# Create your views here.
def applist(request):
    qs = myproject.objects.values()
    # 定义返回字符串
    retStr = ''
    for data in  qs:
        for name,value in data.items():
            retStr += f'{name} : {value} | '

        # <br> 表示换行
        retStr += '<br>'
    return HttpResponse(retStr)

客户端登录 http://192.168.222.222:8000/myapp/ 查看返回的内容:

用java代码连接达梦数据库失败 django连接达梦数据库_用java代码连接达梦数据库失败_15

熟悉前端开发的小伙伴们可利用 Django 提供的一些 HTML 前端页面设计模板来创建一个炫酷的系统,在此本文不过多介绍了,感兴趣的可自行查找相关素材。

9. Django 添加表的操作

(1)修改 myapp/models.py 添加学生信息表字段:

class student_info(models.Model):
    # 学生信息表:
    table_name = models.AutoField(primary_key=True,db_column='STUDENT_INFO')
    # 学号:
    student_num = models.IntegerField(null=True)
    # 学生姓名:
    student_name = models.CharField(max_length=100)
    # 所在院系:
    academy = models.CharField(max_length=200)
    # 所学专业:
    profession = models.CharField(max_length=200)
    # 表名:
    class Meta:
        db_table = 'STUDENT_INFO'

(2)生成数据表:

[root@qiqi222 mydjango]# python manager.py makemigrations
[root@qiqi222 mydjango]# python manager.py migrate

用java代码连接达梦数据库失败 django连接达梦数据库_python_16

 (3)将表添加到超级用户管理站点:

from django.contrib import admin
from .models import myproject, student_info

# Register your models here.
admin.site.register(myproject)
admin.site.register(student_info)

登录 admin 管理站点,就可以对 student_info 表进行增删改查了。

三、问题处理

1. 端口占用错误

用java代码连接达梦数据库失败 django连接达梦数据库_python_17

 将端口换成其他端口号即可,如:http://192.168.222.222:8080/

2. 系统后台报400错误

用java代码连接达梦数据库失败 django连接达梦数据库_Python_18

报错信息显示:Invalid HTTP_HOST header: '192.168.222.222:8000'. You may need to add '192.168.222.222' to ALLOWED_HOST. 修改文件 djangoProject/setting.py 中的 ALLOWED_HOSTS :

ALLOWED_HOSTS = ['192.168.222.222','127.0.0.1']

3. 数据库连接类错误

(1)数据库端口号错误:

        Django 服务端后台错误信息:dmPython.DatabaseEorror: [CODE:-70028]Create SOCKER connection failure.

用java代码连接达梦数据库失败 django连接达梦数据库_django_19

 到 djangoProject/setting.py 文件中检查 DATABASE 参数列表 PORT 是否与达梦数据库端口号一致;

(2)数据库用户名或口令错误:

        Django 服务端后台错误信息:dmPython.DatabaseEorror: [CODE:-2501]Invalid username or password.

用java代码连接达梦数据库失败 django连接达梦数据库_用java代码连接达梦数据库失败_20

        同样的,检查 DATABSE 参数列表 USER 和 PASSWORD 是否正确;如果是在生产环境下,达梦数据库口令过期了,可联系达梦工作人员指导修改口令。

(3)超出数据库用户最大连接数:

用java代码连接达梦数据库失败 django连接达梦数据库_用java代码连接达梦数据库失败_21

         Django 服务端后台错误信息:dmPython.DatabaseError: [CODE:-6002]Exceed user maximum session limitation. 进入达梦数据库管理工具,选择 DJANGO 用户右击修改资源设置项的最大会话数即可。

用java代码连接达梦数据库失败 django连接达梦数据库_python_22

更改会话数后,重启 Django 后台服务或等待 Django 自动刷新。