梅科尔工作室-李庆浩 HarmonyOS+Django数据刷新案例实现

1.前端实现

1.1hml页面代码

<div class="container">
    <div class="box">
        <text class="title">个人信息</text>
    </div>
    <div class="box1">
        <text class="text1">姓名:</text>
        <text class="text1">{{data[0].name}}</text>
    </div>
    <div class="box1">
        <text class="text1">年龄:</text>
        <text class="text1">{{data[0].age}}</text>
    </div>
    <div class="box1">
        <text class="text1">身高:</text>
        <text class="text1">{{data[0].height}}</text>
    </div>
    <div class="box1">
        <text class="text1">体重:</text>
        <text class="text1">{{data[0].weight}}</text>
    </div>
    <div class="box1">
        <text class="text1">爱好:</text>
        <text class="text1">{{data[0].hobby}}</text>
    </div>
    <button class="button1" onclick="shuaxin">刷新</button>
    <div style=" flex-direction: column;">
        <text class="text1">刷新内容:</text>
        <text>{{winfo}}</text>
    </div>
</div>

1.2css代码页面

.container{
    width: 100%;
    flex-direction: column;
    height: 100%;
    align-items: center;
}

.title{
    font-size:30px;
}
.text1{
    font-size:25px;
}
.box{
    height:100px;
}
.box1{
    height:50px;
}
.button1{
    background-color:#11D6BB;
    width:100px;
    height:50px
}

1.3js代码页面

import fetch from '@system.fetch';
import router from '@system.router';
import qs from 'querystring';
export default {
    data: {
        winfo:"",
        //设置各数据的默认值
        data:[
            {
                name:"御坂美琴",
                age:"16",
                height:"170",
                weight:"90",
                hobby:"超电磁炮"
            }
        ]
    },
    onInit() {
        this.title = this.$t('strings.world');
    },
    shuaxin(){
        fetch.fetch({
            //后端的接口,liqing为创建的app的名称,refresh为views中的类名
            url:'http://127.0.0.1:8000/liqing/refresh/',
            //将要发送的数据通过qs转为url的格式并向后端发送
            data:qs.stringify({'name':'白井黑子'}),
            //接受数据的类型
            responseType:"json",
            //发送请求的方法
            method:"POST",
            //接口成功调用的函数,resp.data为返回的数据
            success:(resp)=>
            {
                // 创建一个变量用来接收json化的数据
                var jsondata;
                //用json.parse方法让将字符串类型华为对象类型
                jsondata = JSON.parse(resp.data)
                // 将各种值赋值给js中的各个数据,刷新各数据
                this.data[0].name = jsondata[0].name;
                this.data[0].age = jsondata[0].age;
                this.data[0].height = jsondata[0].height;
                this.data[0].weight = jsondata[0].weight;
                this.data[0].hobby = jsondata[0].hobby;
                this.winfo = resp.data;
                //打印获取成功的数据
                console.log("获取成功")
                console.log("返回的数据:"+this.winfo)
            },
            //接口调用失败则获取失败原因
            fail:(resp)=>
            {
                //打印失败原因
                this.winfo = resp.data;
                console.log("获取失败")
                console.log("失败原因:"+this.winfo)
            }
        })
    }
}

1.4效果展示

2.后端实现

2.1一级路由代码

from django.contrib import admin
from django.urls import path,include
from liqing import urls as liqing_urls

urlpatterns = [
    path('admin/', admin.site.urls),
    path('liqing/',include(liqing_urls,namespace='liqing')),
]

2.2二级路由代码

from django.urls import path
from liqing.views import refresh

app_name = 'liqing'

urlpatterns = [
    path('refresh/', refresh.as_view()),
]

2.3数据表创建和迁移

2.3.1数据表创建

# Create your models here.
from django.db import models

class xinxi(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    height = models.IntegerField()
    weight = models.IntegerField()
    hobby = models.CharField(max_length=20)

2.3.2数据表迁移

在终端中输入如下代码

python manage.py makemigrations  # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate   # 创建表结构

2.3.3数据表数据创建

2.4views.py页面代码

# Create your views here.
import pymysql
from django.http import HttpResponse
from rest_framework.utils import json
from rest_framework.views import APIView

from liqing import models
from liqing.models import student,xinxi


class refresh(APIView):
    # post函数进行数据的接收及后端接口作用的书写
    def post(self, request):
        try:
            #接收前端传来的数据
            aname = request.data.get('name')
            # 在终端中打印前端传来的数据
            print(aname)
            #接收数据库查询到的数据
            result = models.xinxi.objects.filter(name=aname).last()
            #将查询到的数据一一赋值给各数据量
            dname = result.name
            age = result.age
            height = result.height
            weight = result.weight
            hobby = result.hobby
            #创建一个数组变量
            alldata = []
            #在数组中添加后端查询到的数据
            alldata.append({
                'name':dname,'age':age,'height':height,'weight':weight,'hobby':hobby
            })
            # 将数组中的数据进行json化并赋值给alldata_json
            alldata_json = json.dumps(alldata,ensure_ascii=False)
            #打印json化的数据,即打印后端传来的数据
            print(alldata_json)
            # 向前端返回查询到的数据
            return HttpResponse(alldata_json)
        # 查询失败则向前端返回刷新失败的结果
        except xinxi.DoesNotExist as e:
            print("刷新失败")

2.5效果展示

 3.注意事项

3.1前端数据json化

因为我们从后端传来的数据是字符串类型的,所以不能采用对象的方法将各个数据进行刷新赋值,所以采用json.parse方法,将字符串数据转化为对象,然后可以将各个数据进行刷新赋值。

 

 3.2后端数据json化

我们在进行后端数据传输时,有时会出现乱码的情况,为了防止出现这种情况,我们将传输的数据json化,这样可以避免出现乱码的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值