开发日记——Django前后端数据交互(一)

一、关于Django架构的简述

Django使用的是MTV模式

MTV代表Model-Template-View(模型-模版-视图)模式

  • M 模型层(Model)负责与数据库交互
  • T 模版层(Template)负责呈现内容到浏览器
  • V 视图层(View)负责接收请求,获取数据,返回结果

这种设计对后端开发人员是有好的,不用书写大量的SQL语句,简化操作,为深入了解其设计模式,推荐下面博主的文章

6.Django设计模式及模版层_Suyuoa的博客-CSDN博客_django设计模式目录1Django设计模式1.1MVC模式1.2MTV模式2模版层2.1模版配置2.2加载模版2.2.1方案一 loader2.2.2方案二 直接render2.3用字典传递信息2.4模版标签2.4.1if标签2.4.2for标签2.5模版过滤器2.5.1字符串全部变为小写 lower2.5.2字符串全变为大写 upper2.5.3改变数值 add:'n'2.5.4不让字符......https://blog.csdn.net/potato123232/article/details/122804729?ops_request_misc=&request_id=&biz_id=102&utm_term=Django%E6%A8%A1%E5%BC%8F&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-122804729.142%5Ev62%5Epc_search_tree,201%5Ev3%5Eadd_ask,213%5Ev1%5Et3_control1&spm=1018.2226.3001.4187二、对于开发环境的选择

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 %}



    
    
    
    模块1
    


    
{{ data }}

还有一些其他的语法形式

Django之模板语法_BANANAML的博客-CSDN博客模板的定义html里面有模板语法就不是html文件了,这样的文件叫做模板,用于分离文档的表现形式和内容。模板语法分类变量django模板变量的语法为{{ }}如:{{ name }}{{ d.name }} 字典可以根据句点符取值,其中d是一个字典。标签django模板变量的语法为{% tag %}标签比变量复杂:1)一些在输出中创建文本;2)一些通过循环或逻辑来控制流程...https://blog.csdn.net/BANANAML/article/details/102411070?ops_request_misc=&request_id=&biz_id=102&utm_term=%7B%7B%7D%7Ddjango%E8%AF%AD%E6%B3%95&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-102411070.142%5Ev62%5Epc_search_tree,201%5Ev3%5Eadd_ask,213%5Ev1%5Et3_control1&spm=1018.2226.3001.41873.3对于models的理解

对于模型层,真的真的是太友好了,解决了开发过程中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())

下面是一位博主介绍的有关函数的使用

【Python】数据库 fetchone()和fetchall()的使用_只要思想不滑坡办法总比困难多--小鱼干的博客-CSDN博客_fetchone一:fetchone() : 返回单个的元组,也就是一条记录(row),如果没有结果 , 则返回 None cu.execute("select user,password from user where user='%s'" %name) arr= cur.fetchone() ----此时 通过 arr[0],arr[1]可以依次访问user,password二:fetchall() : 返回多个元组,即返回多条记录(rows),如果没有结果,则返回 ().https://blog.csdn.net/weixin_45177786/article/details/120851459以及原生sql的执行

django使用原生SQL查询示例_淘小欣的博客-CSDN博客_django sqldjango使用原生SQL查询示例实际开发中,在ORM模型查询API不够用或或者数据量比较大的情况下,我们只能使用原始的SQL语句进行查询。文章目录django使用原生SQL查询示例1.raw()方法利用RAW方法执行原生的SQL语句RAW()查询可以查询其他表的数据RAW()方法自动将查询字段映射到模型字段原生SQL使用参数2.使用extra方法:3.直接执行原生SQL补充:1.raw()方法raw()管理器方法用于原始的SQL查询,并返回模型的实例。需要注意的是:raw()语法查询必须包含主键https://blog.csdn.net/weixin_44621343/article/details/120318905?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166723319116782428663339%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166723319116782428663339&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-120318905-null-null.142%5Ev62%5Epc_search_tree,201%5Ev3%5Eadd_ask,213%5Ev1%5Et3_control1&utm_term=django%E6%89%A7%E8%A1%8C%E5%8E%9F%E7%94%9Fsql&spm=1018.2226.3001.4187下面变个小魔术

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语句的存储形式,不要加引号否则识别不了。

开发日记——Django前后端数据交互(一)_第1张图片

 最后可以获得数据96

 当然我们的表的数据肯定不是一条两条,对于其他前后端数据交互的形式以后再精进。

你可能感兴趣的:(django,python,后端,mysql)