Django、Flask 与 Javascirpt 之间传值与数据转换

这篇具有很好参考价值的文章主要介绍了Django、Flask 与 Javascirpt 之间传值与数据转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常见问题:JavaScript 如何处理Django、Flask传递的数据库数据

Django 、Flask从数据库读出的数据通常保存为:对象列表、字典列表,或 tuple列表形式

# 用object_list 对象列表表示数据库记录
[
	<Article: id=1,title=星际穿越影评,body=作为一部硬科幻电影,..., ck=False>, 
	<Article: id=2,title=流浪地球,body=《流浪地 球》该部影片..., ck=False>, 
	<Article: id=3,title=海的尽头是草原,body=无论处在多么艰难的时..., ck=False>, 
	<Article: id=4,title=我们的岁月,body=想看看时代的缩影,结..., ck=False>
]
# 用 字典列表来表示数据库记录
[
	{'id': 1, 'title': '星际穿越影评', 'ck': False}, 
	{'id': 2, 'title': '流浪地球', 'ck': False}, 
	{'id': 3, 'title': '海的 尽头是草原', 'ck': False}, 
	{'id': 4, 'title': '我们的岁月', 'ck': False}
]
# 以tuple 列表,或二维列表,表示数据库记录
[
	(1, '星际穿越影评', False), 
	(2, '流浪地球', False), 
	(3, '海的尽头是草原', False), 
	(4, '我们的岁月', False), 
]

有时,我们需要使用Javascript的功能,比如使用 echarts 库进行绘图, 或者为了减轻服务器压力只返回原始数据给浏览器,在本地通过 assembly 或javascript 进行数据处理,等场景下,在javascript 端需要对收到的数据转换为javascript 易于处理的格式。

本文将介绍Django/Flask 数据库Web应用中后端传值,以及前端javascript处理的最佳实践

  • Django/Flask 应该以什么格式传递数据库记录数据
  • 在前端 Javascript 中如何接收以及转换数据

Django、Flask 与 Javascirpt 之间传值与数据转换,django,python,javascript,flask,前端,fastapi

1、区分python中dict与json, js中 object与json区别,以及转换

1.1 python中dict与json区别

什么是 json ?
json的定义javascript object notation, 是javascript 用以文本格式进行网络交换数据、或存储数据的格式。

什么是dict?
dict字曲类型是python 原生类型,主要用于in-memory 的数据描述,不能直接用于存储或网络数据交换。

二者区别

  • 在python中, json 类型是str, 虽然也是用 { key:value } 形式,但”key“必须是双引号,value可以是任意数据类型。integer, str, list, array 等。
  • dict 类型,dict是原生类型,不是字符串. 形式上也是key: value,但key可以双引号,也可用单引号括起来。
  • json格式可以直接写入文件、通过网络接口传递,而dict类型不能直接写入文件,必须转为json或 str,才可以。

dict 与json转换
dict => json :

x_dict = {
    "name": "John",
    "age": 30,
    "city": "New York"
}
y_json = json.dumps(x_dict)

json => dict

y_json = '{"name":"John", "age":30, "city":"New York"}'
# 注意 key必须用"双引号“括起来,外面再用单引号括起来
x_dict = json.loads(y_json)

1.2 javascript 中,json与object的区别

什么是object?
object 是 javascript 的原生类型,也是所有类型的原始类型,但同样也不能直接用于网络传输数据。 形式上,key不能用引号括起来。

var  x = new Object;
x.name = "John"
x.age = 20
console.log(x)

ouput

{ name: 'John', age: 20 }

json in javascript
json 在javascript中,形式上也是string类型,但 key必须用双引号括起来 “key”, 因此json字符串外层只能用单引号括起来

const jsonText = `{
    "browsers": {
      "firefox": {
        "name": "Firefox",
        "pref_url": "about:config",
        "releases": {
          "1": {
            "release_date": "2004-11-09",
            "status": "retired",
            "engine": "Gecko",
            "engine_version": "1.7"
          }
        }
      }
    }
  }`;

  console.log(JSON.parse(jsonText));

output

{
  browsers: {
    firefox: { name: 'Firefox', pref_url: 'about:config', releases: [Object] }
  }
}

二者区别
形式上,

  • json 字符串外层用单引号括起来, “key” 用双引号,value为任意类型. vlue与冒号:之间无空格
  • object 外层无引号, key也不用括起来, value与冒号;之间有空格。

json与object转换

json => object: 用JSON.parse()方法

  // parse method
  const x_json = '{"name":"John", "age":30, "city":"New York"}'
  const y_obj = JSON.parse(x_json)
  console.log(x_json)
  console.log(y_obj)

ouput:

{"name":"John", "age":30, "city":"New York"}
{ name: 'John', age: 30, city: 'New York' }

注意 object r value 与: 之间有空格。

object => json : 用JSON.stringify()

  var z_obj = { x: 10, y: 100}
  var q_json=JSON.stringify(z_obj)

  console.log(z_obj)
  console.log(q_json)

output

{ x: 10, y: 100 }
{"x":10,"y":100}

Object 的key可以省略, 就类似于python 列表, 所以django可以直接将列表传为json传值

q_json  = JSON.stringify([new Number(3), new String('false'), new Boolean(false)]),
console.log(q_json);
z_obj = JSON.parse(q_json)
console.log(typeof(z_obj),Object.keys(z_obj))

output

{ x: 10, y: 100 }
{"x":10,"y":100}
[3,"false",false]
object [ '0', '1', '2' ]

2. Django/Flask传值给 javascript 的处理

2.1 django 传值给用户浏览器

由于dict不能直接用于网络间数据交换,因此django 须先将字典转换成 json 格式
由于object 对象也不能直接用于网络接口,必须经序列化,但这样做的话,在javascript侧解析就比较麻烦。建议将数据库记录使用字典列表的格式,再转为json字符串,发送给模板,或直接用 HttpResponse返还给用户浏览器。
这时API中包含的数据格式,在很多接口规范中,也称为 json数组

2.2 django传值给模板

视图传值给模板文件,实际上还是django内部流程, 所以可以直接用字典、字典列表传值,模板子系统{{{ x_dict }} 收到后,也是会转为html数据后才发送出去。 这种方式,模板中没有使用javascript 时,可以这样做。
Flask使用Jinjia2模板,处理是相同的。

2.3 django传值给模板 javascript

如果模板中包含了 javascript 代码,并需要对视图传递的数据进行处理,则视图不应该直接传递字典、字典列表,也应先将字典列表数据转为json, 再传递给模板。 如下例,传递了书籍列表数据给模板。

## views.py 
from django.shortcuts import render 
from json import dumps 
   
def send_dictionary(request):
    # create data dictionary
    dataDictionary = [{'id': 1, 'title': '星际穿越影评', 'ck': False}, {'id': 2, 'title': '流浪地球', 'ck': False}, {'id': 3, 'title': '海的 尽头是草原', 'ck': False}, {'id': 4, 'title': '我们的岁月', 'ck': False}, {'id': 6, 'title': 'Title_Test_a002', 'ck': False}, {
        'id': 7, 'title': 'Title_Test_a003', 'ck': False}, {'id': 8, 'title': 'Title_Test_a004', 'ck': False}, {'id': 9, 'title': 'A005', 'ck': False}, {'id': 10, 'title': 'A006', 'ck': False}, {'id': 11, 'title': 'A009', 'ck': False}, {'id': 12, 'title': 'A0010', 'ck': False}]

    # dump data to json string
    dataJSON = dumps(dataDictionary)
    # pass json data to template
    return render(request, 'main / landing.html', {'data': dataJSON})

在模板的script部分,javascript 接收数据: data = {{ x_json | safe }} ,再用 JSON.parse(data) 转换为object对象,最后解析数据并处理。

<!-- templates.html 文件 -->
<!-- 以上省略  --> 
<script> 
	// convert json ⇒> object , 第1层为数组
    var data = JSON.parse("{{data|escapejs}}"); 
	for (var i=0; i < data.length; i++){
	  let txt = Object.values(data[i]).join(",")
	  console.log(txt)
	}
</script>

output like

1,星际穿越影评,false
2,流浪地球,false
3,海的 尽头是草原,false
4,我们的岁月,false
6,Title_Test_a002,false
7,Title_Test_a003,false
8,Title_Test_a004,false
9,A005,false
10,A006,false
11,A009,false
12,A0010,false

说明文章来源地址https://www.toymoban.com/news/detail-823205.html

  • 在django侧从数据库中读出的原始数据保存为字典列表,将其转换成json数组后,再传给template.
  • 在javascript 代码中,用 {{ data | escapejs}} 获取json数据,然后用parse() 很方便地将数据转为 object元素构成的数组,
  • JS 用 for循环遍历数组,每个objet元素,将其所有属性值拉出来,拼接成字符串显示出来。

到了这里,关于Django、Flask 与 Javascirpt 之间传值与数据转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python Web开发:Django与Flask框架

    Django和Flask都是Python中非常受欢迎的Web开发框架。虽然它们都是用于构建Web应用程序的工具,但它们在设计理念、使用方式和适用场景等方面存在一些差异。 Django Django是一个“大而全”的框架,遵循MVC设计模式。它内置了很多功能,如ORM(对象关系映射)、模板引擎、表单处

    2024年02月22日
    浏览(52)
  • 面试之 Python 框架 Flask、Django、DRF

    Django:大而全的框架。它的内部组件比较多,如 ORM、Admin、中间件、Form、ModelForm、Session、缓存、信号、CSRF等,功能也都很完善。 flask:微型框架,内部组件就比较少了,但是有很多第三方组件来扩展它,比如 wtform(与django的modelform类似,表单验证)、flask-sqlalchemy(操作数

    2024年02月05日
    浏览(51)
  • Flask vs Django:我该选择哪一个?

    大家好!在选择适合自己的Web开发框架时,Flask和Django都是开发者最喜欢的Python Web应用框架。 在本文章中给大家介绍如何正确选择以及优缺点对比, 喜欢记得收藏、关注、点赞。 Flask是一个轻量级的Web应用框架,它提供了一系列工具和库来帮助你构建Web应用。Flask的设计理念

    2024年04月27日
    浏览(57)
  • 2-Django、Flask和Tornado三大主流框架对比

    在Python的web开发框架中,目前使用量最高的几个是 Django 、 Flask 和 Tornado , 经常会有人拿这几个对比,相信大家的初步印象应该是 Django 大而全、 Flask 小而精、 Tornado 性能高。 了解常用框架 Django 主要特点是大而全,集成了很多组件,例如: Model 、 Admin 、 Form 等等, 不管你用得

    2024年02月04日
    浏览(43)
  • python+django教师业绩考评考核评分系统flask

    在设计过程中,将参照一下国内外的一些同类网站,借鉴下他们的一些布局框架,将课题要求的基本功能合理地组织起来,形成友好、高效的交互过程。开发的具体步骤为: 第一步,进行系统的可行性分析,完成系统的需求分析。 第二步,对系统进行概要设计,设计系统的

    2024年04月09日
    浏览(84)
  • Python web 框架对比:Flask vs Django

    哈喽大家好,我是咸鱼 今天我们从几个方面来比较一些现在流行的两个 python web 框架——Flask 和 Django,突出它们的主要特性、优缺点和简单案例 到最后,大家将更好地了解哪个框架更适合自己的特定需求 参考链接:https://djangocentral.com/flask-vs-django-selecting-the-perfect-python-web

    2024年02月11日
    浏览(46)
  • python三大开发框架django、 flask 和 fastapi 对比

    本文讲述了什么启发了 FastAPI 的诞生,它与其他替代框架的对比,以及从中汲取的经验。 如果不是基于前人的成果,FastAPI 将不会存在。在 FastAPI 之前,前人已经创建了许多工具 。 几年来,我一直在避免创建新框架。首先,我尝试使用许多不同的框架,插件和工具来解决

    2024年02月10日
    浏览(57)
  • Python Web框架:Django、Flask和FastAPI巅峰对决

    今天,我们将深入探讨Python Web框架的三巨头:Django、Flask和FastAPI。无论你是Python小白还是老司机,本文都会为你解惑,带你领略这三者的魅力。废话不多说,让我们开始这场终极对比! Django,这个强大的全能型框架被誉为“Web开发的瑞士军刀”,无愧是大型项目的不二之选

    2024年02月12日
    浏览(60)
  • Django JSONField的自动转换(django自定义模型字段)

    Django v3.1的主要更新之一便是完善了对JSON数据存储的支持,新增models.JSONField和forms.JSONField,可在所有受支持的数据库后端上使用。 通过models.JSONField可指定此字段为存储类型为JSON格式。null=True表示此字段可以为空。 如果您想实现JSONField的自动转换,可以使用Django REST framework的

    2024年02月08日
    浏览(52)
  • python+django贫困山区地区儿童捐赠资助系统+vue+flask

    为了更好地发挥本系统的技术优势,根据贫困地区儿童资助系统的需求,本文尝试以B/S经典设计模式中的django框架,python语言为基础,通过必要的编码处理、贫困地区儿童资助系统整体框架、功能服务多样化和有效性的高级经验和技术实现方法,旨在完成一个快速、高效、便

    2024年04月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包