前后端都搭好了框架,现在就要从后面往前面传数据了。
终于要正式开始了,真的很兴奋。
翻看django的官方指南,按照数据模型,视图的逻辑,首先需要构建一个数据模型,由于我是从其他数据库中得到数据,于是看了下另外数据库中的表。
好家伙,一个表里面数十个字段,这样一个个的新建要到哪一天。
然后按下面步骤:
1、在settings.py中的DATABASES段落的“default”后面新增一个段落,用于链接mysq数据库。
注意:标红色的是数据库database的名称。要跟你下面设置的用户名,密码能够访问的数据库保持一致。
2、然后在下面的终端中输入下面这个命令
python manage.py inspectdb --database adot > models.py
注意:1)这里的adot是对应上面花括号外面那个adot的。如果是你自己的名称,你自己要记得修改哦。2)那个是右箭头,右箭头后面有个空格。
3、就能够在当前目录下models.py这个文件了,文件里面已经获得已经关联上的数据表,无差别的全部得到。打开后就是下面这个样子的。
下面就是所有的数据库表所对应的model了。按自己的需要保留,其他删除。
注意:如果你要管理这个表,也就是增删改,就把关注我标红色这段话,在下面的class Meta: managed = False 改为managed = True。就行了。
4、操作完成后,把这个models.py放到我们的app目录中,也就是docs中。
注意:如果以前的docs里面有models.py文件,不保留的话就覆盖,需要保留的话,就记得把新models.py里面需要的表粘贴到旧的文件里面哦。
5、回到docs\views.py中修改唯一的这段代码,这是用于提供返回结果的。
由于我们确定的是由后端把数据传递到前端去,那么django下就不用template的功能了,需要有django提供json给前端就行了。然后把这个结果返回去就行了。
from django.http import HttpResponse ##要添加这个依赖
from django.shortcuts import render
# Create your views here.
from .models import MtrMaster ## 从当前目录导入这个模型
datause = "adot" ## settings.py中配置的数据源名称
def index(request): ## 定义视图函数,index与urls.py中路由的名字相同
masters = MtrMaster.objects.using(datause).all()
context = {"data": masters}
return HttpResponse(context)
6、由于提供json给前端需要用这个来返回,而在返回前还需要把代码转换为json格式。
这样完成后的代码如下,运营程序,访问网络地址,就能看到json了。
然后前端设置一个网页,把这个json读出来,利用表格的框架就能够显示出来了。
后记...写到这里,就得好好吐槽下,为啥会中间插一篇数据结构了。
因为django从数据库中查到的是一个object,如果需要得到一个list,就需要单独针对上面那段代码新增.values(),然而这个.values()返回的是一个list的objectset。
改造后的代码如下:
import json
from django.http import HttpResponse
from django.shortcuts import render
from django.core.serializers.json import DjangoJSONEncoder ##需要用到这个导入转换list为json
# Create your views here.
datause = "adot" ##settings.py里面设置的数据库名字
from .models import MtrMaster ##这是我读取的表,在models.py中定义
def index(request):
masters = MtrMaster.objects.using(datause).all()
results = masters.values("master_id", "master_name") ##这里一定要注意不能包含前面数据类型中所说明的json不支持的数据类型。
print(results)
context = {"data": list(results)}
return HttpResponse(json.dumps(context, ensure_ascii=False, cls=DjangoJSONEncoder))
最后把这个用json.dumps以后给到httpresponse就行了。
对了,还有几个注意:
1)由于python没有demical和date的数据类型,因此这两个从mysql中读出来后也需要转换。我这里因为是读取显示,所以就直接转string了。
2)前端拿到json后,需要注意vue的ref的赋值逻辑,并不是直接复制给本身,而是需要复制给.value。当然复制完成以后,页面就能够正常响应结果了。