一、关于Django架构的简述
Django使用的是MTV模式
MTV代表Model-Template-View(模型-模版-视图)模式
- M 模型层(Model)负责与数据库交互
- T 模版层(Template)负责呈现内容到浏览器
- V 视图层(View)负责接收请求,获取数据,返回结果
这种设计对后端开发人员是有好的,不用书写大量的SQL语句,简化操作,为深入了解其设计模式,推荐下面博主的文章
2.1前端:根据业务需求,我选择的是Vue+LayUI,可能还会用到Bootstrap,Vue刚接触一段时间,但是前段时间集中在做app(使用的flutter)前端的时候对于组件有了更新的理解,这也是前端工程化的一个重要思想。
2.2后端:对于Java Web的开发我是陌生的,因为之前JDBC连个数据库就搞了好久,所以选择了Django,他的库、包是丰富的,借助之前用C++ MFC做系统的经验搭建环境也是轻松的,虽然一开始无从下手。
2.3数据库:选择的Mysql8.0,得益于SQL server学习的界面操作,为降低代码量、时间花费以及防止输入错误造成的返工,使用Navicat界面性进行傻瓜式操作。
三、需求简述
由于业务信息和项目需求可能不方便透露,所以简述一下:系统使用人员先进行模板表间运算与映射规则设计,前端获取经后端处理将其以SQL语句存储起来,以便在以后对于相同的业务表直接使用正则表达式替换使用。
3.1 settings文件配置
TEMPLATES = [ #模板路径
{
...
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
...
}
]
STATIC_URL = '/static/' #配置静态文件,以便上线
STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'),)
3.2前端配置
{% load static %}<!--load声明-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>模块1</title>
<link href="{% static 'main.css' %}" rel="stylesheet"/><!--引用方式-->
</head>
<body>
<div class="temselectcenter">
<tr>
<td>{{ data }}</td><!--后端数据封装形式-->
<td></td>
</tr>
</div>
</body>
</html>
还有一些其他的语法形式
对于模型层,真的真的是太友好了,解决了开发过程中80%的SQL语句,我觉得对于刚刚接触开发的盆友是容易上手的,仔细观察以下代码段
#models.py
class temproject(models.Model):#测试数据库连接的表
proid = models.IntegerField
proname = models.CharField(max_length=255)
proother = models.CharField(max_length=255)
prostyle = models.IntegerField
class Meta:
db_table="temproject"
#sql建表
CREATE TABLE `NewTable` (
`proid` int NOT NULL ,
`proname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`proother` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`prostyle` int NULL DEFAULT NULL ,
PRIMARY KEY (`proid`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ROW_FORMAT=DYNAMIC
;
不难发现,其关系是一一对应的。
3.4对于刚才需求解决的思考
我们需要将表间计算方法由操作人员设计并以sql语句保存,显然这样直接使用Django的方法和函数是不现实的(可能有更好的解决办法),下面是采用静态语句进行测试,连接是可以正常查询的
from django.db import connection
from tem.models import formtable
from django.shortcuts import render
# Create your views here.
def index(request):
cursor = connection.cursor()
cursor.execute("select sum(prostyle) from temproject;")
p = cursor.fetchall()
data = p[0][0]
# context = {"stulist":list}
return render(request,"temselect.html",locals())
下面是一位博主介绍的有关函数的使用
from django.http import HttpResponse
from tem.models import sqltest
from tem.models import formtable
from django.shortcuts import render
from django.db import connection
# Create your views here.
def index(request):
list = sqltest.objects.get(id=1)#django方法
sql1 = list.sqlsentence
cursor = connection.cursor()#原生游标
cursor.execute(str(sql1))#注意转类型
p = cursor.fetchall()#二维数组
data = p[0][0]
return render(request,"temselect.html",locals())
要注意数据库里面sql语句的存储形式,不要加引号否则识别不了。
最后可以获得数据96
当然我们的表的数据肯定不是一条两条,对于其他前后端数据交互的形式以后再精进。