开发日记——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 %}<!--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>

还有一些其他的语法形式

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

 最后可以获得数据96

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

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Django 通常使用模板语言来与前端交互。模板语言是一种特殊的语法,用来结合 Django后端数据和 HTML 代码。Django 的模板系统允许你使用变量、标签和过滤器在模板中渲染数据。 例如,你可以在模板中使用如下语法来显示一个变量的值: ``` {{ variable }} ``` 你也可以使用标签来执行一些特殊的操作,比如循环或条件判断: ``` {% for item in items %} {{ item }} {% endfor %} ``` 最后,你可以使用过滤器来对变量做一些额外的处理,比如将变量转化为大写或者首字母大写: ``` {{ variable|upper }} {{ variable|capitalize }} ``` 在模板渲染完成后,Django 会将结果发送给浏览器,从而实现与前端的交互。 ### 回答2: Django是一个高效的Python Web框架,也是一个服务器端框架,它与前端交互主要通过以下几种方式: 1. 封装模板引擎:Django内置了强大的模板引擎,可以将前端HTML页面与后端逻辑代码进行分离,实现前后端交互。通过在模板中使用Django提供的模板标签和变量,可以将后端数据传递到前端页面中,完成数据的渲染和展示。 2. 提供RESTful API:Django可以使用Django REST framework来构建RESTful API,通过API可以实现前后端之间的数据交互和通信。前端可以通过发送HTTP请求来调用后端的API,获取数据或进行其他操作,后端则根据请求的方式和参数返回相应的数据。 3. 使用 Ajax 技术:Ajax是一种前端的技术,可以通过在前端页面中使用JavaScript发送异步请求,与后端进行数据交互。在Django中,可以通过定义视图函数来处理Ajax请求,并返回相应的数据,前端可以通过JavaScript的回调函数来处理返回的数据,并进行页面更新或其他操作。 4. WebSocket通信:Django可以使用第三方库来实现WebSocket通信,实现实时的双向数据传输。WebSocket可以在前后端之间建立持久性连接,实现实时通信和数据更新。通过在Django中创建WebSocket视图和处理器,前端可以使用WebSocket API与后端进行通信,并实现实时数据更新和推送。 总的来说,Django与前端交互的方式有很多种,可以根据具体的需求和场景选择适合的方式进行交互,从而实现前后端数据传递和通信。 ### 回答3: Django是一个基于Python的Web框架,它可以与前端进行交互以实现动态网页的开发。 首先,Django通过使用模板语言实现与前端的交互。模板语言允许将动态数据插入到HTML模板中,从而生成最终的网页。在Django中,我们可以使用模板引擎来处理模板,通过标签和过滤器来操作模板中的数据,将数据传递给前端页面。 其次,Django提供了强大的视图功能来处理前端请求。我们可以定义视图函数,它们负责接收前端的请求并返回相应的数据。视图函数可以处理GET和POST等不同类型的请求,根据请求的类型和参数进行相应的操作,并将结果返回给前端页面。使用Django的路由系统,我们可以将请求的URL地址与相应的视图函数进行绑定,从而实现请求的分发和处理。 另外,Django还提供了表单功能来处理前端的用户输入。我们可以定义表单类来描述前端页面上的输入字段,并通过视图函数对表单数据进行验证和处理。Django的表单功能提供了丰富的验证选项,可以轻松地检查用户输入的有效性,并将错误信息返回给前端页面。 最后,Django还可以与前端进行异步交互,实现前后端数据传输和更新。通过使用Django的视图函数和前端的JavaScript代码,我们可以实现异步请求和响应处理,从而实现更加流畅和交互性的用户体验。 综上所述,Django通过模板语言、视图函数、表单功能和异步交互等方式与前端进行交互,实现了动态网页的开发。这些功能使得开发者能够灵活地处理并响应前端的请求,从而实现了良好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值