目录
2. 编译安装驱动源码库 dmPython 和 django_dmPython
一、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 组件 |
二、开发步骤
1. 实现效果
Django 后端使用达梦数据库作为与前端的数据交互的数据库,登录 Admin 后台管理账号,实现对数据库表的增、删、改、查操作。
2. 编译安装驱动源码库 dmPython 和 django_dmPython
Django 访问达梦数据库需要以 dmPython 库和 Django_dmPython 库作为数据库的 API,这两个库是达梦提供 Django 开发的源码,得要先编译进 python 解释器才能成功导入,否则 python 解释器“不认识”这两个库,导致后台报错。安装编译过程如下:
(1)环境搭建:
a. 安装达梦数据库:
详情请参考博文:
[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 部分:
与 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
检查 dmPython、django_dmPython 和 Django 这三个库都齐全后,就可以开始创建 Django 项目了。
3. 手动创建 Django 项目
(1)进入 Python 安装目录下的 bin 目录,创建 django-admin 软连接:
[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 目录(项目配置目录),里面装着项目的配置文件。
4. PyCharm 创建 Django 项目
(1)打开终端创建一个目录用于存放项目文件:
[root@qiqi222 ~]# mkdir -p /app/python3/pyfile
(2)PyCharm 连接远程服务器:
操作步骤详情请参考以下博文有关 PyCharm 连接虚拟机的内容部分:
(4)检查目录结构:
打开终端,查看项目目录结构是否与 PyCharm 的项目文件结构一致,结构一致说明 PyCharm 能顺利将文件上传至服务端。
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
此时进入数据库查看已创建的表。
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
进入达梦数据库管理工具查看超级用户创建信息:
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.
能成功响应返回信息,证明 Django 搭建成功!
(2)登录超级管理员账号 http://192.168.222.222:8000/admin/ ,利用 Django 自带的模板对数据进行增删改查表:
类似的操作多添加几条信息,进入达梦数据库管理工具查看表信息:
通过超级用户管理平台就可以实现对数据库的增删改查了。
(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/ 查看返回的内容:
熟悉前端开发的小伙伴们可利用 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
(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. 端口占用错误
将端口换成其他端口号即可,如:http://192.168.222.222:8080/
2. 系统后台报400错误
报错信息显示: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.
到 djangoProject/setting.py 文件中检查 DATABASE 参数列表 PORT 是否与达梦数据库端口号一致;
(2)数据库用户名或口令错误:
Django 服务端后台错误信息:dmPython.DatabaseEorror: [CODE:-2501]Invalid username or password.
同样的,检查 DATABSE 参数列表 USER 和 PASSWORD 是否正确;如果是在生产环境下,达梦数据库口令过期了,可联系达梦工作人员指导修改口令。
(3)超出数据库用户最大连接数:
Django 服务端后台错误信息:dmPython.DatabaseError: [CODE:-6002]Exceed user maximum session limitation. 进入达梦数据库管理工具,选择 DJANGO 用户右击修改资源设置项的最大会话数即可。
更改会话数后,重启 Django 后台服务或等待 Django 自动刷新。
更多资讯请上达梦技术社区了解: https://eco.dameng.com