程序员开发实例大全宝库

网站首页 > 编程文章 正文

从零开始打造云端AI管理调度平台(七)内容库的设计_2

zazugpt 2024-09-04 22:12:22 编程文章 19 ℃ 0 评论

最近闲来无事,想着把自己工作正在做的一个项目做一个简单的分享与实战教程,该项目不困难但是由于涉及要素过多所以比较复杂。所以这里分享出来也是为了帮助新手小白能在实战当中快速了解python知识。主要内容涉及Python、HTML5、JavaScript、云计算、AI等。

文章最后有源码获取攻略哦~

如果有大佬发现问题,也非常欢迎指教

上期回顾

上期我们完成了数据库的创建及内容库部分的数据库设计,这期我们将介绍内容库的UI及功能设计。

内容库UI

首先我们可以看到其实UI的左侧导航栏和上侧导航栏其实是一样的,不一样的地方主要在于中间红色框部分。红色框部分的上部分表头是静态数据,而下部分因为还没数据所以暂时没有内容,下部分则是动态数据。

以下是这一部分UI设计的内容:

<!doctype html>
<html lang="en">


<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
    <meta name="generator" content="Hugo 0.88.1">
    <title>AI调度管理平台</title>
    <!-- Bootstrap core CSS -->
    <link href="/statics/css/bootstrap.min.css" rel="stylesheet">
    <link href="/statics/css/all.css" rel="stylesheet">
    <link href="/statics/css/myfont.css" rel="stylesheet">


    <style>
        .bd-placeholder-img {
            font-size: 1.125rem;
            text-anchor: middle;
            -webkit-user-select: none;
            -moz-user-select: none;
            user-select: none;
        }
        
        @media (min-width: 768px) {
            .bd-placeholder-img-lg {
                font-size: 3.5rem;
            }
        }
</style>




    <!-- Custom styles for this template -->
    <link href="/statics/css/sidebars.css" rel="stylesheet">
</head>


<body>
    <main>
        <div class="col-2">
            <div class="d-flex flex-column flex-shrink-0 p-3 text-white bg-dark" style="height: 100vh;">
                <a href="#" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none">
                    <i class="fas fa-cloud" style="font-size: 30px;"></i>
                    <span class="fs-4">  AI调度管理平台</span>
                </a>
                <hr>
                <ul class="nav nav-pills flex-column mb-auto">
                    <li class="nav-item">
                        <a href="/" class="nav-link text-white">
                            <svg class="bi me-2" width="16" height="16">
                        </svg> 主页
                        </a>
                    </li>
                    <li>
                        <a href="#" class="nav-link text-white">
                            <svg class="bi me-2" width="16" height="16">
                        </svg> 智能标签
                        </a>
                    </li>
                    <li>
                        <a href="/ai_cut/" class="nav-link text-white">
                            <svg class="bi me-2" width="16" height="16">
                        </svg> 智能拆条
                        </a>
                    </li>
                    <li>
                        <a href="#" class="nav-link text-white">
                            <svg class="bi me-2" width="16" height="16">
                        </svg> 智能唱词
                        </a>
                    </li>
                    <li>
                        <a href="#" class="nav-link text-white">
                            <svg class="bi me-2" width="16" height="16">
                        </svg> 人脸检测
                        </a>
                    </li>
                    <li>
                        <a href="#" class="nav-link active" aria-current="page">
                            <svg class="bi me-2" width="16" height="16">
                        </svg> 内容库
                        </a>
                    </li>
                </ul>
                <hr>
            </div>
        </div>
        <div class="col-10 container-fluid bg-light">
            <div class="row container-fluid bg-light">
                <header class="p-3 mb-3 border-bottom">
                    <div class="container-fluid">
                        <div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
                            <ul class="nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0">
                                <li><a href="#" class="nav-link px-4 link-secondary">概况</a></li>
                                <li><a href="#" class="nav-link px-4 link-dark">用户管理</a></li>
                                <li><a href="#" class="nav-link px-4 link-dark">开发者支持</a></li>
                                <li><a href="#" class="nav-link px-4 link-dark">帮助</a></li>
                            </ul>


                            <form class="col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3">
                                <input type="search" class="form-control" placeholder="Search..." aria-label="Search">
                            </form>


                            <div class="dropdown text-end">
                                <a href="#" class="d-block link-dark text-decoration-none dropdown-toggle" id="dropdownUser1" data-bs-toggle="dropdown" aria-expanded="false">
                                    <img src="/statics/images/头像.jpg" alt="mdo" width="32" height="32" class="rounded-circle">
                                </a>
                                <ul class="dropdown-menu text-small" aria-labelledby="dropdownUser1">
                                    <li><a class="dropdown-item" href="#">个人信息</a></li>
                                    <li><a class="dropdown-item" href="#">安全凭证</a></li>
                                    <li><a class="dropdown-item" href="#">钱包</a></li>
                                    <li>
                                        <hr class="dropdown-divider">
                                    </li>
                                    <li><a class="dropdown-item" href="#">退出登录</a></li>
                                </ul>
                            </div>
                        </div>
                    </div>
                </header>
            </div>
            <div class="row my-3 flex-wrap mx-3 shadow">


                <div class="row m-1" style="font-family: pinfang;">
                    <table class="table">
                        <thead>
                            <tr>
                                <th scope="col">媒体ID</th>
                                <th scope="col">创建时间</th>
                                <th scope="col" style="min-width: 120px;">媒体名称</th>
                                <th scope="col" style="min-width: 120px;">素材大小</th>
                                <th scope="col">状态</th>
                                <th scope="col">操作</th>
                            </tr>
                        </thead>
                        <tbody id="media_table">
                        </tbody>
                    </table>
                </div>


            </div>


        </div>
    </main>




    <script src="/statics/js/bootstrap.bundle.min.js"></script>
    <script type="text/javascript" src="/statics/js/echarts.min.js"></script>
    <script type="text/javascript" src="/statics/js/westeros.js"></script>
    <script src="/statics/js/sidebars.js"></script>
    <script src="/statics/js/jquery-3.6.0.min.js"></script>
    <script src="/statics/js/content_storage_myjs.js"></script>


</body>


</html>

注意:一般情况下表格的下方都要设置分页按钮,即平常我们浏览其他网页时可以看到的首页、上一页、下一页这种按钮,这里我们暂时不做设置,想要把该系统完善的更好的朋友可以尝试一下。

我们的界面设计好了,如何让数据从后台传过来呢?

这里我个人习惯是采用jquery里面的ajax方法,从上面代码我们可以看到我们引入了一个叫做content_storage_myjs.js的js文件:

<script src="/statics/js/content_storage_myjs.js"></script>

该文件里面的内容如下:

$(function () {
   test()
   function test(){
   $.ajaxSetup({ cache: false });
   $.ajax({
      url:'/get_content_media/',
      type:'get',
      data:{},
      cache:false,
      timeout:10000,
      success:function (result) {
         $("#media_table").html(result.data)
      },
      error:function (result) {
      },
   })
}
}
)

在该文件里面,我们定义了一个test函数及在网页加载时调用了该函数。而该函数则向url:'/get_content_media/'发出get请求,返回回来的内容会填充在id为media_table的内容里面也就是我们前面定义好的table这个部分:

但是目前我们暂时还没有对url:'/get_content_media/'进行定义,以及访问内容库的函数我们也还没有定义,所以我们接下来就要先打开views.py:

定义访问内容库的函数

#返回内容库页面
def content_storage(request):
    return render(request,'content_storage.html')

通过这个函数可以渲染content_storage.html这个文件,这个文件就是我们上面写好的UI界面。

然后我们到urls.py里面给这个函数定义一个访问路径:

from django.contrib import admin
from django.urls import path
from mainbody.views import *


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
    path('content_storage/', content_storage),
]

同样的我们命名为content_storage,这时候你打开http://127.0.0.1:8000/content_storage就可以看到你的内容库界面了。

定义访问内容库数据库的函数

首先我们同样打开views.py,添加以下内容:

import pymysql
from django.http import HttpResponse
import json


#返回内容库数据库
def get_content_media(request):
    myDict = {'data': []}
    conn=pymysql.connect(host='localhost',
                     user='root',
                     password='',#输入你的数据库密码
                     database='test')
    cursor=conn.cursor()
    sql="select * from mainbody_content_media order by create_time DESC"
    cursor.execute(sql)
    result=cursor.fetchall()
    conn.close()
    html=''
    for each in result:
        html=html+"<tr>" \
             "<th>{}</th>" \
             "<td>{}</td>" \
             "<td>{}</td>" \
             "<td>{}</td>" \
             "<td><i class=\"fas fa-check-circle\" style=\"color:lawngreen;\"></i></td>" \
             "<td><a href=\"#\">查看详情</a></td></tr>".format(each[0],each[1],each[2],each[3])
    myDict['data']=html
    return HttpResponse(json.dumps(myDict), content_type='application/json')

这里我们是通过返回json数据的方式返回内容,这里可以看出我们其实不止是返回了表格里面的数据,而是直接返回了整个表格的结构。

同时我们这里没有采用传统的django通过model取数据的方法,而是直接采用了sql语句来访问数据,这是因为我个人比较习惯用这种方法,有兴趣的朋友可以去搜索一下如何使用django的model操作数据库。

注意:上面引入了3个新的包,请放到views.py最上面。

然后我们需要在urls.py中定义一个路径:

from django.contrib import admin
from django.urls import path
from mainbody.views import *


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
    path('content_storage/', content_storage),
    path('get_content_media/', get_content_media),
]

测试一下

我们打开workbench,输入一个插入语句:

insert into test.mainbody_content_media (create_time,name,size,path) values ('2022-03-23 15:00:00','测试素材.mp4','500MB','D:\\测试素材');

然后刷新内容库界面,我们就可以看到数据啦

如果文章帮助到了您,可否给一个点赞关注收藏呢~

如果遇到编程上的问题,欢迎留言哦~

关注作者回复:aiweb,获取源码下载地址哦~

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表