Django 是一个开放源代码的 Python Web 应用框架,采用 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。Django 将 MVC 中的视图进一步分解为 Django 视图 和 Django 模板两个部分。MVC 中的控制器由 Django 框架的 URLconf 来实现。
Django 被认为是"大而全"的重量级 Web 框架,其自带大量的常用工具和组件(比如数据库 ORM 组件、用户认证、权限管理、分页、缓存), 甚至还自带了管理后台 Admin,适合快速开发功能完善的企业级网站。
URL 映射器 : 用于根据请求 URL 将 HTTP 请求重定向到相应的视图。
View : 视图是一个请求处理函数,它接收 HTTP 请求并返回 HTTP 响应。
Models : 模型是定义应用程序数据结构的 Python 对象,并提供在数据库中管理(添加,修改,删除)和查询记录的机制。Django 的 Model 层自带数据库 ORM 组件。
使用 Django 来访问达梦数据库
使用 Django 访问达梦数据库时需要先安装 dmPython 和 Django_dmPython,此外还需要安装 Django 。
安装完 DM 数据库软件后,在安装路径下的 drivers 目录下的 python 目录中,可以找到 dmPython 和Django_dmPython 的驱动源码,由于提供的是源码,需要自己编译安装,详细的编译安装方法参考 Python应用程序开发。
开发环境
软件 | 版本 |
---|---|
达梦数据库 | DM8 |
Python | 3.6.8 |
Django | 3.1.7 |
PyCharm | PyCharm 2021.1.3 |
开发步骤:
编译安装 dmPython 驱动
cd D:\dmdbms\drivers\python\dmPython
python setup.py install
编译安装达梦提供 Django 驱动 Django_dmPython
cd D:\dmdbms\drivers\python\django317\django_dmPython
python setup.py install
注意编译安装与 django 版本对应的 Django_dmPython
使用 pip 安装 django
pip install django==3.1.7
注意安装时需指定 Django 版本。
使用 pip list 命令查看是否安装成功
查看搜索路径并将 dpi 目录文件拷贝到搜索路径下
dmPython 通过调用 DM DPI 接口完成 Python 模块扩展。在其使用过程中,除 Python标准库以外,还需要 DPI 的运行环境。
注意Windows 环境需要执行此操作,Linux 环境设置 LD_LIBRARY_PATH 环境变量即可。
进入 python 解释器查看搜索路径
python
import sys
sys.path
C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\dmpython-2.3-py3.6-win-amd64.egg
使用 PyCharm 新建项目 dm_django317
创建 Django 项目
在 PyCharm 中打开 Terminal 执行:
django-admin startproject mysite
将会创建一个 mysite 目录。
创建 dm 应用
在 Django 中,项目是一个网站使用的配置和应用的集合。项目可以包含很多个应用。
cd mysite
python manage.py startapp dm
将会创建一个 dm 目录。
创建视图
编辑 dm/views.py 文件
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, 达梦数据库。 ")
在 dm 目录里新建 urls.py 文件
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
在根 URLconf 文件中指定创建的 dm.urls 模块
在 mysite/urls.py 文件的 urlpatterns 列表里插入一个 include()
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('dm/', include('dm.urls')),
path('admin/', admin.site.urls),
]
启动 Django 自带的简易服务器,验证是否正常工作
在 PyCharm 中打开 Terminal 执行:
python manage.py runserver
浏览器访问 http://127.0.0.1:8000/dm/
数据库配置
编辑 mysite/settings.py 配置文件
设置时区:
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
设置 DATABASES 设置项:
DATABASES = {
'default': {
'ENGINE': 'django_dmPython', #使用的数据库后端
'NAME': 'DAMENG',
'USER': 'SYSDBA',
'PASSWORD': 'SYSDBA',
'HOST': '192.168.201.118',
'PORT': '5236',
'OPTIONS': {'local_code': 1, 'connection_timeout': 5}
}
}
创建模型
编辑 dm/models.py 文件
class Book(models.Model):
class Meta:
db_table = 'PRODUCT'
PRODUCTID = models.AutoField(primary_key=True, db_column='PRODUCTID')
NAME = models.CharField(max_length=100, null=True)
AUTHOR = models.CharField(max_length=25, null=True)
PUBLISHER = models.CharField(max_length=50, null=True)
PUBLISHTIME = models.DateField(null=True)
PRODUCTNO = models.CharField(max_length=25, null=True)
SATETYSTOCKLEVEL = models.IntegerField(null=True)
ORIGINALPRICE = models.DecimalField(max_digits=5, decimal_places=2, null=True)
NOWPRICE = models.DecimalField(max_digits=10, decimal_places=4, null=True)
DISCOUNT = models.DecimalField(max_digits=2, decimal_places=1, null=True)
DESCRIPTION = models.TextField(null=True)
TYPE = models.CharField(max_length=5, null=True)
PAPERTOTAL = models.IntegerField(null=True)
WORDTOTAL = models.IntegerField(null=True)
SELLSTARTTIME = models.DateField(null=True)
SELLENDTIME = models.DateField( null=True)
创建数据库表
登录数据库创建表
CREATE TABLE "PRODUCT"
(
"PRODUCTID" INT IDENTITY(1, 1) PRIMARY KEY,
"NAME" VARCHAR(100) NOT NULL,
"AUTHOR" VARCHAR(25) NOT NULL,
"PUBLISHER" VARCHAR(50) NOT NULL,
"PUBLISHTIME" DATE NOT NULL,
"PRODUCT_SUBCATEGORYID" INT,
"PRODUCTNO" VARCHAR(25) NOT NULL,
"SATETYSTOCKLEVEL" SMALLINT NOT NULL,
"ORIGINALPRICE" DEC(19,4) NOT NULL,
"NOWPRICE" DEC(19,4) NOT NULL,
"DISCOUNT" DECIMAL(2,1) NOT NULL,
"DESCRIPTION" TEXT,
"PHOTO" IMAGE,
"TYPE" VARCHAR(5),
"PAPERTOTAL" INT,
"WORDTOTAL" INT,
"SELLSTARTTIME" DATE NOT NULL,
"SELLENDTIME" DATE
);
把 dm 应用安装到 Django 项目里
在 Djang o项目中包含 dm 应用,需要在配置类 INSTALLED_APPS 中添加设置。
'dm.apps.DmConfig',
运行 python manage.py makemigrations 为模型的改变生成迁移文件
在 PyCharm 中打开 Terminal 执行:
python manage.py makemigrations dm
迁移是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式 - 它们其实也只是一些你磁盘上的文件。
在 dm 目录里新建一个 services.py 文件
该代码实现增、删、改、查四个基本操作。
from .models import Book
#查询
def fun_get_books():
books = Book.objects.all() #返回QuerySet
total_rows=books.count()
print('查询到'+str(total_rows)+'条记录')
for book in books:
print(book.NAME, book.AUTHOR, book.PUBLISHER)
print('')
#增加
def fun_insert_book():
NewBook = Book()
NewBook.NAME = '水浒传'
NewBook.AUTHOR = '施耐庵,罗贯中'
NewBook.PUBLISHER = '中华书局'
NewBook.PUBLISHTIME = '2005-4-1'
NewBook.PRODUCTNO = '9787101046137'
NewBook.SATETYSTOCKLEVEL = '10'
NewBook.ORIGINALPRICE = '19'
NewBook.NOWPRICE = '14.3'
NewBook.DISCOUNT = '7.5'
NewBook.DESCRIPTION = '''
《水浒传》是宋江起义故事在民间长期流传基础上产生出来的,吸收了民间文学的营养。
《水浒传》是我国人民最喜爱的古典长篇白话小说之一。它产生于明代,是在宋、元以来有关水浒的故事、话本、戏曲的基础上,由作者加工整理、创作而成的。
全书以宋江领导的农民起义为主要题材,艺术地再现了中国古代人民反抗压迫、英勇斗争的悲壮画卷。
作品充分暴露了封建统治阶级的腐朽和残暴,揭露了当时尖锐对立的社会矛盾和“官逼民反”的残酷现实,成功地塑造了鲁智深、李逵、武松、林冲、阮小七等一批英雄人物。
小说故事情节曲折,语言生动,人物性格鲜明,具有高度的艺术成就。但作品歌颂、美化宋江,鼓吹“忠义”和“替天行道”,表现出严重的思想局限。
'''
NewBook.PHOTO = ''
NewBook.TYPE = '16'
NewBook.PAPERTOTAL = '922'
NewBook.WORDTOTAL = '912000'
NewBook.SELLSTARTTIME = '2006-03-20'
NewBook.SELLENDTIME = '2021-07-12'
NewBook.save()
print('插入成功')
#更新
def fun_update_book():
try:
obj = Book.objects.get(PRODUCTID=1) #返回结果有且只有一个
obj.NAME='水浒'
obj.save()
print('更新成功')
except Book.DoesNotExist:
print('PRODUCTID=1的记录不存在,未更新任何数据')
#删除
def fun_delete_book():
obj = Book.objects.filter(NAME='水浒') #返回QuerySet
del_rows=obj.count()
obj.delete()
print('删除'+str(del_rows)+'条记录')
编写视图
编辑 dm/views.py 文件
from django.http import HttpResponse
from .services import fun_get_books
from .services import fun_insert_book
from .services import fun_update_book
from .services import fun_delete_book
def index(request):
# 查询
fun_get_books()
# 增加
fun_insert_book()
fun_get_books()
# 更新
fun_update_book()
fun_get_books()
# 删除
fun_delete_book()
fun_get_books()
return HttpResponse("执行结束,请到控制台查看输出结果。")
启动 Django 自带的简易服务器
在 PyCharm 中打开 Terminal 执行:
python manage.py runserver
浏览器访问 http://127.0.0.1:8000/dm/