python实现可视化大屏(django+pyechars)

1.实现效果图

2.对数据库进行迁移

python manage.py makemigrations

python manage.py migrate

3.登录页面

{% load static%}
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>登录</title>
    <style>
        /* 清除浏览器默认边距,
使边框和内边距的值包含在元素的width和height内 */

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

/* 使用flex布局,让内容垂直和水平居中 */

section {
    /* 相对定位 */
    position: relative;
    overflow: hidden;
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    /* linear-gradient() 函数用于创建一个表示两种或多种颜色线性渐变的图片 */
    background: linear-gradient(to bottom, #f1f4f9, #dff1ff);
}

/* 背景颜色 */

section .color {
    /* 绝对定位 */
    position: absolute;
    /* 使用filter(滤镜) 属性,给图像设置高斯模糊*/
    filter: blur(200px);
}

/* :nth-child(n) 选择器匹配父元素中的第 n 个子元素 */

section .color:nth-child(1) {
    top: -350px;
    width: 600px;
    height: 600px;
    background: #ff359b;
}

section .color:nth-child(2) {
    bottom: -150px;
    left: 100px;
    width: 500px;
    height: 500px;
    background: #fffd87;
}

section .color:nth-child(3) {
    bottom: 50px;
    right: 100px;
    width: 500px;
    height: 500px;
    background: #00d2ff;
}

.box {
    position: relative;
}

/* 背景圆样式 */

.box .circle {
    position: absolute;
    background: rgba(255, 255, 255, 0.1);

    backdrop-filter: blur(5px);
    box-shadow: 0 25px 45px rgba(0, 0, 0, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.5);
    border-right: 1px solid rgba(255, 255, 255, 0.2);
    border-bottom: 1px solid rgba(255, 255, 255, 0.2);
    border-radius: 50%;
    animation-delay: calc(var(--x) * -1s);
}


@keyframes animate {
    0%, 100%, {
        transform: translateY(-50px);
    }
    50% {
        transform: translateY(50px);
    }
}

.box .circle:nth-child(1) {
    top: -50px;
    right: -60px;
    width: 100px;
    height: 100px;
}

.box .circle:nth-child(2) {
    top: 150px;
    left: -100px;
    width: 120px;
    height: 120px;
    z-index: 2;
}

.box .circle:nth-child(3) {
    bottom: 50px;
    right: -60px;
    width: 80px;
    height: 80px;
    z-index: 2;
}

.box .circle:nth-child(4) {
    bottom: -80px;
    left: 100px;
    width: 60px;
    height: 60px;
}

.box .circle:nth-child(5) {
    top: -80px;
    left: 140px;
    width: 60px;
    height: 60px;
}

/* 登录框样式 */

.container {
    position: relative;
    width: 400px;
    min-height: 400px;
    background: rgba(255, 255, 255, 0.1);
    display: flex;
    justify-content: center;
    align-items: center;
    backdrop-filter: blur(5px);
    box-shadow: 0 25px 45px rgba(0, 0, 0, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.5);
    border-right: 1px solid rgba(255, 255, 255, 0.2);
    border-bottom: 1px solid rgba(255, 255, 255, 0.2);
}

.form {
    position: relative;
    width: 100%;
    height: 100%;
    padding: 50px;
}


.form h2 {
    position: relative;
    color: #fff;
    font-size: 24px;
    font-weight: 600;
    letter-spacing: 5px;
    margin-bottom: 30px;
    cursor: pointer;
}

/* 登录标题的下划线样式 */

.form h2::before {
    content: "";
    position: absolute;
    left: 0;
    bottom: -10px;
    width: 0px;
    height: 3px;
    background: #fff;
    transition: 0.5s;
}

.form h2:hover:before {
    width: 53px;
}

.form .inputBox {
    width: 100%;
    margin-top: 20px;
}


.form .inputBox input {
    width: 100%;
    padding: 10px 20px;
    background: rgba(255, 255, 255, 0.2);
    outline: none;
    border: none;
    border-radius: 30px;
    border: 1px solid rgba(255, 255, 255, 0.5);
    border-right: 1px solid rgba(255, 255, 255, 0.2);
    border-bottom: 1px solid rgba(255, 255, 255, 0.2);
    font-size: 16px;
    letter-spacing: 1px;
    color: #fff;
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
}

.form .inputBox input::placeholder {
    color: #fff;
}



.form .inputBox input[type="submit"] {
    background: #fff;
    color: #666;
    max-width: 100px;
    margin-bottom: 20px;
    font-weight: 600;
    cursor: pointer;
}

.forget {
    margin-top: 6px;
    color: #fff;
    letter-spacing: 1px;
}

.forget a {
    color: #fff;
    font-weight: 600;
    text-decoration: none;
}
    </style>
</head>

<body>
    <section>
 
        <div class="color"></div>
        <div class="color"></div>
        <div class="color"></div>
        <div class="box">
     
            <div class="circle" style="--x:0"></div>
            <div class="circle" style="--x:1"></div>
            <div class="circle" style="--x:2"></div>
            <div class="circle" style="--x:3"></div>
            <div class="circle" style="--x:4"></div>
    
            <div class="container">
                <div class="form">
                    <h2>登录页面</h2>
                    <form action="{% url 'pic:login' %}" method="post">
                        {% csrf_token %}
                        <div class="inputBox">
                            <input type="text" placeholder="姓名" name="username">

                        </div>
                        <div class="inputBox">
                            <input type="password" placeholder="密码" name="password">

                        </div>
                        <div class="inputBox">
                            <input type="submit" value="登录">
                        </div>


                    </form>
                </div>
            </div>
        </div>
    </section>
</body>

</html>

4.设置路由

主路由

子路由

5.登录接口完整代码

def login(request):
    if request.method == "GET":
        return render(request, 'login.html')

    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        print(username, password)
        try:
            # 使用 Django 自带的 authenticate 方法验证用户身份
            user = authenticate(request, username=username, password=password)
            if user:
                request.session["user"] = user.pk
                return redirect('pic:page')
            else:
                return redirect('pic:login')

        except User.DoesNotExist:
            messages.add_message(request, messages.WARNING, "用户名或密码错误!")
            return render(request, "login.html", {})

6.其他接口的完整代码


def line_1(request):
    area_color_js = (
        "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
        "[{offset: 0, color: '#eb64fb'}, {offset: 1, color: '#3fbbff0d'}], false)"
    )
    l1 = (
        Line()
            .add_xaxis(xaxis_data=data['日期'].dt.strftime('%Y-%m-%d').tolist())
            .add_yaxis(
            series_name="涨跌幅",
            y_axis=data['涨跌幅'].tolist(),
            symbol_size=8,
            is_hover_animation=False,
            label_opts=opts.LabelOpts(is_show=True),
            linestyle_opts=opts.LineStyleOpts(width=1.5, color='#D14A61'),
            is_smooth=True,
            areastyle_opts=opts.AreaStyleOpts(color=JsCode(area_color_js), opacity=1),
        )
            .set_global_opts(
            title_opts=opts.TitleOpts(
                title="涨跌幅及涨跌额趋势", pos_left="center",
                title_textstyle_opts=opts.TextStyleOpts(color='#ededed')
            ),
            tooltip_opts=opts.TooltipOpts(trigger="axis"),
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True, link=[{"xAxisIndex": "all"}]
            ),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=True,
                    is_realtime=True,
                    start_value=30,
                    end_value=70,
                    xaxis_index=[0, 1],
                )
            ],
            xaxis_opts=opts.AxisOpts(
                type_="category",
                boundary_gap=False,
                axisline_opts=opts.AxisLineOpts(is_on_zero=True, linestyle_opts=opts.LineStyleOpts(color='#FFF')),
                axislabel_opts=opts.LabelOpts(color='#FFF')
            ),
            yaxis_opts=opts.AxisOpts(name="幅度", axislabel_opts=opts.LabelOpts(color='#FFF'),
                                     axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#fff'))),
            legend_opts=opts.LegendOpts(pos_left="center", pos_top='6%', orient='horizontal', is_show=True,
                                        textstyle_opts=opts.TextStyleOpts(color='#ffffff')),
            toolbox_opts=opts.ToolboxOpts(
                is_show=True,
                feature={
                    "dataZoom": {"yAxisIndex": "none"},
                    "restore": {},
                    "saveAsImage": {},
                },
            ),
        )
    )

    l2 = (
        Line()
            .add_xaxis(xaxis_data=data['日期'].dt.strftime('%Y-%m-%d').tolist())
            .add_yaxis(
            series_name="涨跌额",
            y_axis=data['涨跌额'].tolist(),
            xaxis_index=1,
            yaxis_index=1,
            symbol_size=8,
            is_hover_animation=False,
            label_opts=opts.LabelOpts(is_show=True, color="#6E9EF1", position='bottom'),
            linestyle_opts=opts.LineStyleOpts(width=1.5, color="#6E9EF1"),
            is_smooth=True,
            areastyle_opts=opts.AreaStyleOpts(color=JsCode(area_color_js), opacity=1),
        )
            .set_global_opts(
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True, link=[{"xAxisIndex": "all"}]
            ),
            tooltip_opts=opts.TooltipOpts(trigger="axis"),
            xaxis_opts=opts.AxisOpts(
                grid_index=1,
                type_="category",
                boundary_gap=False,
                axisline_opts=opts.AxisLineOpts(is_on_zero=True, linestyle_opts=opts.LineStyleOpts(color='#FFF')),
                position="top",
                axislabel_opts=opts.LabelOpts(color='#FFF'),
            ),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_realtime=True,
                    type_="inside",
                    start_value=30,
                    end_value=70,
                    xaxis_index=[0, 1],
                )
            ],
            yaxis_opts=opts.AxisOpts(is_inverse=True, name="额度", axislabel_opts=opts.LabelOpts(color='#FFF'),
                                     axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#fff'))),
            legend_opts=opts.LegendOpts(pos_left="center", pos_top='9%',
                                        textstyle_opts=opts.TextStyleOpts(color='#ffffff')),
        )
    )
    c = (
        Grid(init_opts=opts.InitOpts(width="540px", height="710px", bg_color='#0256B6'))
            .add(chart=l1, grid_opts=opts.GridOpts(pos_left=50, pos_right=50, height="35%"))
            .add(
            chart=l2,
            grid_opts=opts.GridOpts(pos_left=50, pos_right=50, pos_top="55%", height="35%")

        )
    )
    # return HttpResponse(c.render_embed())
    return c


def pie_1(request):
    # 转换日期列为日期时间格式并排序
    data['日期'] = pd.to_datetime(data['日期'])
    data.sort_values(by='日期', inplace=True)

    # 将日期列转换为年月格式
    data['年月'] = data['日期'].dt.to_period('M').astype(str)

    # 将成交量列除以10000
    data['成交量'] = round(data['成交量'] / 10000, 2)

    # 按年月分组,并计算平均成交量
    grouped_data = data.groupby('年月', as_index=False).agg({'成交量': 'mean'})

    tl = Timeline(init_opts=opts.InitOpts(width='450px', height='710px', bg_color='#0256B6'))
    for year in range(2023, 2025):
        # 获取当前年份的数据
        current_year_data = grouped_data[grouped_data['年月'].str.startswith(str(year))]

        pie = (
            Pie(init_opts=opts.InitOpts(bg_color='#0256B6'))
                .add(
                "商家A",
                [list(z) for z in zip(current_year_data['年月'], current_year_data['成交量'].round(2))],
                rosetype="radius",
                radius=["30%", "55%"],
            )
                .set_global_opts(title_opts=opts.TitleOpts(title="{}年成交量(万)".format(year),
                                                           title_textstyle_opts=opts.TextStyleOpts(color='#FFF'),
                                                           pos_top='top', pos_right='center'),
                                 legend_opts=opts.LegendOpts(pos_top='10%',
                                                             textstyle_opts=opts.TextStyleOpts(color='#FFF')))
        )
        pie.set_colors(
            ["#91CC75", "#EE6666", "#EEC85B", "#64B5CD", "#FF69B4", "#BA55D3", "#CD5C5C", "#FFA500",
             "#40E0D0"])
        tl.add_schema(
            play_interval=1500,  # 表示播放的速度(跳动的间隔),单位毫秒(ms)
            is_auto_play=True,  # 设置自动播放
            # is_timeline_show=False,  # 不展示时间组件的轴
            pos_bottom='5%',
            is_loop_play=True,  # 是否循环播放
            width='300px',
            pos_left='center',
            label_opts=opts.LabelOpts(color='#FFF'),
        )
        tl.add(pie, "{}年".format(year))

    return tl


def heatmap_1(request):
    # 转换日期列为日期时间格式并排序
    data['日期'] = pd.to_datetime(data['日期'])
    data.sort_values(by='日期', inplace=True)
    # 创建年月列
    data['年月'] = data['日期'].dt.to_period('M').astype(str)  # 这将把日期转换为年月格式,例如 2024-03
    # 按年月分组
    grouped_data = data.groupby('年月')

    # 计算每个月的平均交易量(除以1000000以便缩小范围)
    avg = round(grouped_data['成交额'].mean() / 10000000, 2)
    value = [[i, j, avg[i]] for i in range(len(grouped_data['年月'])) for j in range(1)]
    # 创建热力图
    heatmap = (
        HeatMap(init_opts=opts.InitOpts(height='200px', width='300px', bg_color='#0256B6'))
            .add_xaxis(avg.index.tolist())
            .add_yaxis("", [''], value,
                       label_opts=opts.LabelOpts(is_show=True, color='#FFF', position='inside', font_size=10))
            .set_global_opts(
            visualmap_opts=opts.VisualMapOpts(
                min_=min(avg.values.tolist()),
                max_=max(avg.values.tolist()),
                range_text=["High", "Low"],
                textstyle_opts=opts.TextStyleOpts(color='#EDEDED'),
                orient="vertical",
                pos_left="left",
                item_height=280,
                item_width=10,
                pos_bottom='20px'
            ),
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color='#FFF'), is_show=False),
            yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color='#FFF'), is_show=False),

        )
    )
    return heatmap


def scatter_1(request):
    # 转换日期列为日期时间格式并排序
    data['日期'] = pd.to_datetime(data['日期'])
    data.sort_values(by='日期', inplace=True)
    # 创建年月列
    data['年月'] = data['日期'].dt.to_period('M').astype(str)  # 这将把日期转换为年月格式,例如 2024-03
    # 按年月分组并计算每月的最高和最低平均值
    grouped_data = data.groupby('年月', as_index=False).agg({'最高': 'mean', '最低': 'mean'})
    # 将平均值转换为万美元
    grouped_data['最高平均'] = round(grouped_data['最高'] / 1, 0)
    grouped_data['最低平均'] = round(grouped_data['最低'] / 1, 0)

    # 获取最低值和最高值
    min_value = grouped_data['最低平均'].min()

    s = (
        EffectScatter(init_opts=opts.InitOpts(width='430px'))
            .add_xaxis(grouped_data['年月'].tolist())
            .add_yaxis("最高平均", grouped_data['最高平均'].tolist(), symbol=SymbolType.ARROW)
            .add_yaxis("最低平均", grouped_data['最低平均'].tolist(), symbol=SymbolType.DIAMOND)
            .set_global_opts(
            title_opts=opts.TitleOpts(title="每月平均的最高开盘、最低开盘及成交额(百万)",
                                      title_textstyle_opts=opts.TextStyleOpts(color='#ededed')),
            # visualmap_opts=opts.VisualMapOpts(max_=2100, min_=1000, is_show=True),
            yaxis_opts=opts.AxisOpts(min_=1600, max_=min_value, axislabel_opts=opts.LabelOpts(interval=100),
                                     axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#fff')),
                                     splitline_opts=opts.SplitLineOpts(is_show=True)),
            legend_opts=opts.LegendOpts(orient='vertical', pos_right='3%', legend_icon='pin', pos_top='5%',
                                        textstyle_opts=opts.TextStyleOpts(color='#ededed')),
            xaxis_opts=opts.AxisOpts(axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#FFF'))),
        )
            .set_series_opts(label_opts=opts.LabelOpts(color='pink'))
    )
    c = (
        Grid(init_opts=opts.InitOpts(width="470px", height="710px", bg_color='#0256B6'))
            .add(chart=s, grid_opts=opts.GridOpts(pos_left=50, pos_right=50, height="35%"))
            .add(
            chart=heatmap_1(request),
            grid_opts=opts.GridOpts(pos_left=50, pos_right=50, pos_top="55%", height="35%")

        )
    )

    return c


def page(request):
    page2 = Page(layout=Page.SimplePageLayout)
    page2.add(
        line_1(request),
        pie_1(request),
        scatter_1(request),
    )
    return HttpResponse(page2.render_embed())

7.排版(将可视化图表的位置进行排版)

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #currentTime {
            position: fixed;
            bottom: 25px;
            left: 20px;
            color: white;
            font-size: 15px;
            z-index: 999;
        }

        body {
            overflow-y: hidden;
        }
    </style>
</head>
<body style="background-color: #0D325F">
<div style="display: flex; justify-content: space-between;">
    <span id="currentTime"></span>

    <div style="width:calc(25%); height: 900px; margin-top: 20px">
        <iframe src="{% url 'pic:line' %}" width="100%" height="72%" frameborder="0" scrolling="no"
                style="background-color: rgba(128, 128, 128, 0.2);"></iframe>
    </div>


    <div style="width:calc(50%); height: 900px; display: flex; flex-direction: column; justify-content: center; align-items: center;">
{#        <iframe src="{% url 'pic:' %}" width="100%" height="100%" frameborder="0" scrolling="no"></iframe>#}
        <iframe src="{% url 'pic:polar' %}" width="100%" height="100%" frameborder="0" scrolling="no"
                style="margin-left: 28%"
        ></iframe>
    </div>


    <div style="width:calc(25%); height: 800px; display: flex; justify-content: center; flex-direction: column; align-items: center;">
        <iframe src="{% url 'pic:heat' %}" width="100%" height="100%" frameborder="0" scrolling="no"
                style="background-color: rgba(128, 128, 128, 0);"></iframe>
        <iframe src="{% url 'pic:graph' %}" width="100%" height="100%" frameborder="0" scrolling="no"
                style=" background-color: rgba(128, 128, 128, 0); margin-top: 10%"></iframe>
    </div>

</div>


<script>
    function updateTime() {
        var now = new Date();
        var weekdays = ["日", "一", "二", "三", "四", "五", "六"]; // 中文星期
        var year = now.getFullYear();
        var month = now.getMonth() + 1; // getMonth() returns 0-based month
        var day = now.getDate();
        var dayOfWeek = weekdays[now.getDay()];
        var hours = now.getHours();
        var minutes = now.getMinutes();
        var seconds = now.getSeconds();

        // Add leading zero if the number is less than 10
        month = month < 10 ? '0' + month : month;
        day = day < 10 ? '0' + day : day;
        hours = hours < 10 ? '0' + hours : hours;
        minutes = minutes < 10 ? '0' + minutes : minutes;
        seconds = seconds < 10 ? '0' + seconds : seconds;

        var currentTimeString = year + '-' + month + '-' + day + ' 星期' + dayOfWeek + ' ' + hours + ':' + minutes + ':' + seconds;
        document.getElementById('currentTime').textContent = currentTimeString;
    }

    updateTime(); // Call the function initially to display time without delay

    // Update time every second
    setInterval(updateTime, 1000);
</script>

</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/746197.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件管理器加载缓慢-禁用文件类型自动发现功能

文件管理器加载缓慢-禁用文件类型自动发现功能 右键“Shell”项&#xff0c;选择新建“字符串值” “FolderType”&#xff0c;数值为 NotSpecified。

文字实录|Checkout.com大中华区总经理项尧:品牌全球化发展中的支付运营策略

大家好&#xff0c;很高兴在此次【品牌全球化营销增长峰会】与大家一起分享和交流。 我叫项尧&#xff0c;是 Checkout.com 大中华区的总经理&#xff0c;在支付领域有将近15年的经验。 我们 Checkout.com 是一家总部位于英国的支付公司&#xff0c;专注于线上收单&#xff0…

旧衣回收小程序开发:回收市场的新机遇

当下&#xff0c;旧衣服回收已经成为了一种流行趋势&#xff0c;居民都将闲置的衣物进行回收&#xff0c;旧衣回收市场规模在不断增加。随着市场规模的扩大&#xff0c;为了让居民更加便利地进行回收&#xff0c;线上回收小程序也应运而生&#xff0c;为大众打造了一个线上回收…

程序员学长 | 快速学会一个算法,RNN

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;快速学会一个算法&#xff0c;RNN 今天给大家分享一个超强的算法模型&#xff0c;RNN 循环神经网络&#xff08;Recurrent Neural Network, RNN&…

新改进!LSTM与注意力机制结合,性能一整个拿捏住

众所周知&#xff0c;LSTM并不能很好地处理长序列和重要信息的突出&#xff0c;这导致在某些情况下性能不佳。而注意力机制模拟人类视觉注意力机制的特点可以很好地解决这个问题。 说具体点就是&#xff0c;注意力机制通过权重分布来决定应该关注输入序列中的哪些部分&#xf…

完整代码Python爬取豆瓣电影详情数据

完整代码Python爬取豆瓣电影详情数据 引言 在数据科学和网络爬虫的世界里&#xff0c;豆瓣电影是一个丰富的数据源。在本文中&#xff0c;我们将探讨如何使用Python语言&#xff0c;结合requests和pyquery库来爬取豆瓣电影的详情页面数据。我们将通过一个具体的电影详情页面作…

3d渲染软件有哪些(2),渲染100邀请码1a12

3D渲染软件有很多&#xff0c;上次我们介绍了几个&#xff0c;这次我们接着介绍。 1、Arnold Arnold渲染器是一款基于物理算法的电影级渲染引擎&#xff0c;它具有渲染质量高、材质系统丰富、渲染速度快等特点&#xff0c;是3D设计师的极佳选择。2、Octane Render Octane Ren…

云3D渲染:深度剖析技术原理、优势及其在各行业的广泛应用

云3D渲染技术&#xff0c;在数字化转型的大潮中&#xff0c;以其显著的优势和广阔的应用潜力&#xff0c;正在深刻地重塑多个行业的未来。它不仅为电影特效、建筑设计、游戏开发和虚拟现实等领域注入了前所未有的视觉震撼&#xff0c;还促进了创意思维与前沿技术的紧密结合&…

【编译原理】总览

1 字母表 字母表&#xff1a; 用∑表示&#xff0c;它是一个有穷符号集合 符号&#xff1a;字母、数字、标点符号... 例如&#xff1a;二进制字母表为{0&#xff0c;1}&#xff0c;ASCII字符集 2 字母表的运算 字母表上的乘积&#xff1a; ∑1∑2{ab | a属于∑1&#xff0c;b…

气流流型烟雾模型研究相关法规要求及拍摄注意事项

气流模式可视化提供制药设施中实际气流模型的视觉记录。它是目前最广泛接受的、证明关键工艺区域的气流模型满足监管期望的方法。此外&#xff0c;气流模型可视化允许多个职能组织发现气流设计和功能的有效性和意义&#xff0c;特别是在关键领域。 与气流模型相关的法规指南要求…

数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南

文章目录 &#x1f4d1;引言一、Elasticsearch Pipeline的原理二、Elasticsearch Pipeline的使用2.1 创建 Pipeline2.2 使用 Pipeline 进行索引2.3 常用的 Processor 三、实际应用场景3.1 日志数据处理3.2 数据清洗和标准化3.3 数据增强 四、最佳实践4.1 性能优化4.2 错误处理4…

晶方科技:台积电吃饱,封装迎春?

半导体产业链掀起涨价潮&#xff0c;先进封装迎接利好。 这里我们来聊国内先进封装企业——晶方科技。 近期&#xff0c;由于产能供不应求&#xff0c;台积电决定上调先进封装产品价格&#xff0c;还表示订单已经排到2026年。 大哥吃不下了&#xff0c;剩下的订单全都是空间。…

GMSB文章四:微生物组多样性分析

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 Alpha多样性主要关注的是样品内部的多样性&#xff0c;即一个特定区域或生态系统内的物种丰…

加油卡APP系统开发,优惠加油!

在当下的社会生活中&#xff0c;汽车已经成为了家家户户必备的出行工具&#xff0c;骑车加油也成为了居民生活中不可或缺的事情。为了让大众更加优惠加油&#xff0c;在线加油卡系统成为了一个重要的加油渠道&#xff01; 在线加油卡系统是一个移动应用程序&#xff0c;用户可…

记一次elementui时间线的实现

实现效果 点击展开&#xff0c;每次累加五条数据进行展示 实现思路 起始本质上就是一个分页查询&#xff0c;只不过按新的形式展示&#xff0c;然后也不统计总数&#xff0c;每次只展示固定的5条数据点击加载更多&#xff0c;就展示下一页&#xff0c;页的页数进行1&#xff…

回购注销高管减持,东软集团的“大手笔”有意义吗?

文&#xff1a;互联网江湖 作者&#xff1a;刘致呈 作为老牌软件巨头&#xff0c;东软集团这两年的业绩着实有些不够看。 看财报数据&#xff0c;22年东软集团营收94.66亿&#xff0c;净亏损3.47亿&#xff0c;扣非净利利润-5.30亿。23年&#xff0c;集团营收105.44亿&#x…

玩个游戏 找以下2个wordpress外贸主题的不同 你几找到几处

Aitken艾特肯wordpress外贸主题 适合中国产品出海的蓝色风格wordpress外贸主题&#xff0c;产品多图展示、可自定义显示产品详细参数。 https://www.jianzhanpress.com/?p7060 Ultra奥创工业装备公司wordpress主题 蓝色风格wordpress主题&#xff0c;适合装备制造、工业设备…

使用Spring Boot构建RESTful API:从理论到实践

文章目录 引言第一章 RESTful API基础知识1.1 什么是RESTful API1.2 RESTful API的优势 第二章 Spring Boot基础知识2.1 什么是Spring Boot2.2 Spring Boot的主要特性 第三章 使用Spring Boot构建RESTful API3.1 项目初始化3.2 构建基础结构3.3 定义实体类3.4 创建Repository接…

虚拟化技术(一)

目录 一、虚拟化技术简介二、服务器虚拟化&#xff08;一&#xff09;服务器虚拟化的层次&#xff08;二&#xff09;服务器虚拟化的底层实现&#xff08;三&#xff09;虚拟机迁移&#xff08;四&#xff09;隔离技术&#xff08;五&#xff09;案例分析 一、虚拟化技术简介 虚…

【十六】【QT开发应用】Menu菜单,contextMenuEvent,setContextMenuPolicy,addAction

在 Qt 框架中&#xff0c;QMenu 类用于创建和管理菜单。菜单是用户界面的一部分&#xff0c;可以包含多个选项或动作&#xff0c;用户可以选择这些选项来执行特定的功能。菜单通常显示在菜单栏、上下文菜单&#xff08;右键菜单&#xff09;或工具栏中。 基本用法 创建菜单对象…