当前位置: 首页 > news >正文

学习大数据DAY34 面向对象思想深化练习 将从豆瓣爬取的数据置入自己搭建的网站上

目录

查看电影类型的电影列表

添加电影

修改电影

上机练习 13 使用三层架构完善 web 系统


查看电影类型的电影列表

DAL.py 文件
class MovieDAL(DBHelper):
def getMovieByTid(self,typeid):
sql=f"""select id,title,release_date,score,tname
from MovieType inner join Movie on MovieType.tid =Movie.typeid
where typeid={typeid}"""
return self.cha(sql)
app.py 文件
from DAL import MovieTypeDAL,MovieDAL
mtdal=MovieTypeDAL()
mdal=MovieDAL()
@app.route("/movieList/<typeid>")
def movieList(typeid):
result=mdal.select(typeid)
return render_template("movieList.html",info=result)

添加电影

#app.py
@app.route("/addMovie")
def addMovie():
result=mtdb.select()
return render_template("addMovie.html",info=result)
#addMovie.html
<select name="typeid">
{% for i in info %}
<option value="{{i[0]}}">{{i[1]}}</option>
{% endfor %}
</select>

修改电影

修改电影下拉框参考代码: app.py
@app.route("/updateMovie/<id>")
def updateMovie(id):
result=mdb.getMovieByID(id)
resultType=mtdb.select()
return
render_template("updateMovie.html",info=result,info1=resultTyp
e,tid=int(result[4]))
修改电影下拉框参考代码: updateMovie.html
<p> 电影类型:
<select name="typeid">
{% for i in info1 %}
{% if i[0]==tid %} <option value="{{i[0]}}" selected="selected">{{i[1]}}</option>
{% else %}
<option value="{{i[0]}}">{{i[1]}}</option>
{% endif %}
{% endfor %}
</select>
</p>

上机练习 13 使用三层架构完善 web 系统

查看不同电影类型的电影列表
实现电影的添加
实现电影的修改删除功能,注意刷新页面的处理
电影类型列表页添加模糊搜索电影功能,搜索后跳转到电影列表页
(新增 searchMovie.html)
App.py:( 业务逻辑 )
from flask import Flask,render_template,request
from DAL import MovieTypeDAL,DouBanMovieDAL
from Model import MovieType,DoubanMovieType
app=Flask(__name__)
mtdal=MovieTypeDAL()
mdal=DouBanMovieDAL()
tid_old=0
# 主页列表(全部)
@app.route("/")
def list():result=mdal.select()
# print(result)
return render_template("DouBanMovies.html",info=result)
# 根据电影种类筛选电影
@app.route("/DouBanMoviesSelect", methods=["POST"])
def DouBanMoviesSelect():
keyword=request.form.get("MovieType")
if keyword=="全部":
result=mdal.select()
else:
result=mdal.getMovieByType(keyword)
return render_template("DouBanMovies.html",info=result)
# 根据电影名关键字搜索电影
@app.route("/DouBanMoviesSearch", methods=["POST"])
def DouBanMoviesSearch():
keyword=request.form.get("titlekeywords")
result=mdal.getMovieBytitle(keyword)
return render_template("DouBanMovies.html",info=result)
# 进入添加电影页面
@app.route("/addDouBanMovie")
def add():
return render_template("addDouBanMovie.html")
# 添加提交
@app.route("/DouBanMovieaddSubmit", methods=["POST"])
def addSubmit():
id=request.form.get("id")
title=request.form.get("title")
release_date=request.form.get("release_date")
score=request.form.get("score")
types=request.form.get("types")
mt=DoubanMovieType(id,title,release_date,score,types)
result=mdal.insert(mt)
if result>0:
return "添加成功 <a href='/'>刷新</a>"
else:
return "添加失败 <a href='/'>刷新</a>"
# 删除
@app.route("/deleteDouBanMovie/<id>")
def delete(id):
result=mdal.delete(id)
if result>0:
return "删除成功 <a href='/'>刷新</a>"
else:return "删除失败 <a href='/'>刷新</a>"
# 修改
@app.route("/updateDouBanMovie/<id>")
def update(id):
result=mdal.selectByid(id)
return
render_template("updateDouBanMovies.html",info=result)
# 修改提交
@app.route("/updateDouBanMovieSubmit", methods=["POST"])
def updateSubmit():
# 修改数据
old_id=request.form.get("old_id")
id=request.form.get("id")
title=request.form.get("title")
release_date=request.form.get("release_date")
score=request.form.get("score")
types=request.form.get("types")
result=mdal.update(old_id,"id",id)
result1=mdal.update(old_id,"title",title)
result2=mdal.update(old_id,"release_date",release_date)
result3=mdal.update(old_id,"score",score)
result4=mdal.update(old_id,"types",types)
if result or result4 or result1 or result2 or result3:
return "修改成功 <a href='/'>刷新</a>"
else:
return "修改失败 <a href='/'>刷新</a>"
if __name__=="__main__":
app.run(host="127.0.0.1",port=5000,debug=True)

DAL.py:数据访问

import datetime
import pymysql
class DBHelper:
# 方法
# 数据库链接
def openDB(self):
global conn
conn=pymysql.connect(host="127.0.0.1",user="root",
password="root123456",database="test",charset="utf8")
global baoma
baoma=conn.cursor()# 关闭数据库
def closeDB(self):
baoma.close()
conn.close()
# 数据增删改
def edit(self,sql):
self.openDB()
result=baoma.execute(sql)
conn.commit()
self.closeDB()
return result
# 查询多条
def chaAll(self,sql):
self.openDB()
baoma.execute(sql)
result=baoma.fetchall()
self.closeDB()
return result
# 查询一条
def chaOne(self,sql):
self.openDB()
baoma.execute(sql)
result=baoma.fetchone()
self.closeDB()
return result
class MovieTypeDAL(DBHelper):
# 插入数据
def insert(self,mt):
sql=f"insert into MovieType(tname,tcontent,tdate)
values('{mt.tname}','{mt.tcontent}',now())"
return self.edit(sql)
# 查询数据
def select(self):
sql="select * from MovieType"
return self.chaAll(sql)
# 根据 id 号修改数据
def update(self,tid,UpdateColumn,EndValue):
if type(EndValue)==str:
sql=f"update MovieType set
{UpdateColumn}='{EndValue}' where tid={tid}"
elif type(EndValue)==int :sql=f"update MovieType set {UpdateColumn}={EndValue}
where tid={tid}"
elif type(EndValue)==datetime.datetime:
sql=f"update MovieType set
{UpdateColumn}='{EndValue}' where tid={tid}"
return self.edit(sql)
# 通过 id 号查询数据
def selectByTid(self,tid):
sql=f"select * from MovieType where tid={tid}"
return self.chaOne(sql)
# 通过 id 号删除数据
def delete(self,tid):
sql=f"delete from MovieType where tid={tid}"
return self.edit(sql)
class DouBanMovieDAL(DBHelper):
# 插入数据
def insert(self,dm):
sql=f"insert into
DoubanMovieType(id,title,release_date,score,types)
values('{dm.id}','{dm.title}','{dm.release_date}','{dm.score}',
'{dm.types}')"
return self.edit(sql)
# 查询数据
def select(self):
sql="select * from DoubanMovieType"
return self.chaAll(sql)
# 根据 id 号修改数据
def update(self,id,UpdateColumn,EndValue):
if type(EndValue)==str:
sql=f"update DoubanMovieType set
{UpdateColumn}='{EndValue}' where id={id}"
else :
sql=f"update DoubanMovieType set
{UpdateColumn}={EndValue} where id={id}"
return self.edit(sql)
# 通过 id 号查询数据
def selectByid(self,id):
sql=f"select * from DoubanMovieType where id={id}"
return self.chaOne(sql)
# 通过 id 号删除数据
def delete(self,id):
sql=f"delete from DoubanMovieType where id={id}"return self.edit(sql)
# 根据类型查询电影
def getMovieByType(self,type):
sql=f"""select id,title,release_date,score,types
from DoubanMovieType
where types like '%{type}%'"""
return self.chaAll(sql)
# 根据电影名称查询电影
def getMovieBytitle(self,titlekeywords):
sql=f"""select id,title,release_date,score,types
from DoubanMovieType
where title like '%{titlekeywords}%'"""
return self.chaAll(sql)
model 模型层:
import datetime
class MovieType:
tname=""
tcontent=""
tdate=datetime.datetime.now()
def __init__(self,tname1,tcontent1):
self.tname=tname1
self.tcontent=tcontent1
class DoubanMovieType:
id=""
title=""
release_date=""
score=""
types=""
def __init__(self,id1,title1,release_date1,score1,types1):
self.id=id1
self.title=title1
self.release_date=release_date1
self.score=score1
self.types=types1
addDouBanMovie.html:( 添加电影界面 )
<html>
<head>
<title>添加电影</title>
</head>
<body><h1>欢迎使用豆瓣网</h1>
<a href="/">首页</a>
<a href="">电影类型列表</a>
<a href="">添加电影类型</a>
<a href="/addDouBanMovie">添加电影</a>
<a href="">查看柱状图</a>
<a href="">查看饼状图</a>
<p></p>
<form method="post" action="/DouBanMovieaddSubmit">
<p>电影编号:<input type="text" name="id" /></p>
<p>电影名称:<input type="text" name="title" /></p>
<p>上映时间:<input type="date" name="release_date"
/></p>
<p>评分:<input type="number" name="score" /></p>
<p>电影种类:<input type="text" name="types" /></p>
<!-- 添加按键 -->
<input type="submit" value="添加">
</form>
</body>
<style>
body{ margin: 0 auto; width: 800px;
background-image:url('/static/html 封面图.png');
background-repeat:no-repeat;
background-size: cover;
}
h1{ color: #258dcd}
a{
background-color: #258dcd;
color: white;
padding: 5px 8px;
text-decoration: none;
border-radius: 5px;
/*半透明*/
/*background-color:rgba(55,55,55,0.5)*/
}
</style>
</html>
DouBanMovies.html:( 主页,总表页 )
<html>
<head>
<title>豆瓣网首页</title><meta charset="utf-8"/>
</head>
<body>
<h1>欢迎使用豆瓣网</h1>
<a href="/">首页</a>
<a href="">电影类型列表</a>
<a href="">添加电影类型</a>
<a href="/addDouBanMovie">添加电影</a>
<a href="">查看柱状图</a>
<a href="">查看饼状图</a>
<h1>输入你喜欢的电影进行搜索吧!</h1>
<form method="post" action="/DouBanMoviesSelect">
选择电影种类:
<input type="text" name="MovieType" placeholder="请
输入电影种类">
<input type="submit" value="提交">
</form>
<p></p>
<form method="post" action="/DouBanMoviesSearch">
输入电影名称关键字:
<input type="text" name="titlekeywords" placeholder="
请输入电影名称">
<input type="submit" value="提交">
</form>
<p></p>
<table>
<tr><td>电影编号</td><td>电影名称</td><td>上映时间
</td><td>评分</td><td>电影种类</td></tr>
{% for i in info %}
<tr><td>{{ i[0] }}</td><td>{{ i[1] }}</td><td>{{ i[2]
}}</td><td>{{ i[3] }}</td><td>{{ i[4] }}</td>
<td><a href="/updateDouBanMovie/{{ i[0] }}">修改</a>
<a href="/deleteDouBanMovie/{{ i[0] }}">删除</a></td></tr>
{% endfor %}
</table>
</body>
<style>
body{ margin: 0 auto; width: 800px;
background-image:url('/static/html 封面图.png');
background-repeat:no-repeat;
background-size: cover;
background-position: center;
}h1{ color: #258dcd}
a{
background-color: #258dcd;
color: white;
padding: 1px 12px;
text-decoration: 12px;
border-radius: 12px;
/*半透明*/
/*background-color:rgba(55,55,55,0.5)*/
}
table,tr,td{ border: 2px solid black; border-collapse:
collapse;}
table{ width: 100% ;}
td{ text-align: center; padding: 20px;}
.tou{
background-color: #258dcd;
color: white;
font-size: 18px;
font-weight: bold;
}
</style>
</html>
DouBanMoviesSelect.html:( 模糊筛选页 )
<html>
<head>
<title>筛选结果</title>
<meta charset="utf-8"/>
</head>
<body>
<h1>欢迎使用豆瓣网</h1>
<a href="/">首页</a>
<a href="">电影类型列表</a>
<a href="">添加电影类型</a>
<a href="/addDouBanMovie">添加电影</a>
<a href="">查看柱状图</a>
<a href="">查看饼状图</a>
<form method="post" action="/DouBanMoviesSelect">
<select name="MovieType">
<option type="text" value="全部">全部</option>
<option type="text" value="喜剧">喜剧</option>
<option type="text" value="动作">动作</option>
<option type="text" value="动画">动画</option></select>
<input type="submit" value="提交">
</form>
<form method="post" action="/DouBanMoviesSearch">
<input type="text" name="titlekeywords" placeholder="
请输入电影名称">
<input type="submit" value="提交">
</form>
<p></p>
<table>
<tr><td>电影编号</td><td>电影名称</td><td>上映时间
</td><td>评分</td><td>电影种类</td></tr>
{% for i in info %}
<tr><td>{{ i[0] }}</td><td>{{ i[1] }}</td><td>{{ i[2]
}}</td><td>{{ i[3] }}</td><td>{{ i[4] }}</td>
<td><a href="/updateDouBanMovie/{{ i[0] }}">修改</a>
<a href="/deleteDouBanMovie/{{ i[0] }}">删除</a></td></tr>
{% endfor %}
</table>
</body>
<style>
body{ margin: 0 auto; width: 800px;
background-image:url('/static/html 封面图.png');
background-repeat:no-repeat;
background-size: cover;
background-position: center;
}
h1{ color: #258dcd}
a{
background-color: #258dcd;
color: white;
padding: 1px 12px;
text-decoration: 12px;
border-radius: 12px;
/*半透明*/
/*background-color:rgba(55,55,55,0.5)*/
}
table,tr,td{ border: 2px solid black; border-collapse:
collapse;}
table{ width: 100% ;}
td{ text-align: center; padding: 20px;}
.tou{
background-color: #258dcd;color: white;
font-size: 18px;
font-weight: bold;
}
</style>
</html>
updateDouBanMovies.html:( 修改电影信息页 )
<html>
<head>
<title>修改电影信息</title>
</head>
<body>
<h1>欢迎使用豆瓣网</h1>
<a href="/">首页</a>
<a href="">电影类型列表</a>
<a href="">添加电影类型</a>
<a href="/addDouBanMovie">添加电影</a>
<a href="">查看柱状图</a>
<a href="">查看饼状图</a>
<p></p>
<form method="post" action="/updateDouBanMovieSubmit">
<p>电影编号:<input type="text" name="id"
value="{{ info[0] }}"><input type="hidden" name="old_id"
value="{{ info[0] }}" readonly="readonly"/></p>
<p>电影名称:<input type="text" name="title"
value="{{ info[1] }}"/></p>
<p>上映时间:<input type="date" name="release_date"
value="{{ info[2] }}"/></p>
<p>评分:<input type="number" name="score"
value="{{ info[3] }}"/></p>
<p>电影种类:<input type="text" name="types"
value="{{ info[4] }}"/></p>
<!-- 修改按键 -->
<p><input type="submit" value="修改" /></p>
</form>
</body>
<style>
body{ margin: 0 auto; width: 800px;
background-image:url('/static/html 封面图.png');
background-repeat:no-repeat;
background-size: cover;}
h1{ color: #258dcd}
a{
background-color: #258dcd;
color: white;
padding: 5px 8px;
text-decoration: none;
border-radius: 5px;
/*半透明*/
/*background-color:rgba(55,55,55,0.5)*/
}
</style>
</html>
我的部分代码和老师教的有点出入,所以主界面有点不一样,不过我觉得还行。
各个功能都测试过了。从上午忙活到吃晚饭,头都发昏了!

相关文章:

学习大数据DAY34 面向对象思想深化练习 将从豆瓣爬取的数据置入自己搭建的网站上

目录 查看电影类型的电影列表 添加电影 修改电影 上机练习 13 使用三层架构完善 web 系统 查看电影类型的电影列表 DAL.py 文件 class MovieDAL(DBHelper): def getMovieByTid(self,typeid): sqlf"""select id,title,release_date,score,tname from Mo…...

【开端】通过Java 过滤器灵活配置URL访问权限,并返回403

一、绪论 在JAVA项目系统中&#xff0c;后端给前端提供接口。但是在某些场景我们需要临时控制接口是否能被访问。或关闭某一接口的访问权限。 比如某一接口被攻击了或者某一接口存在漏洞&#xff0c;在系统不关闭的情况下&#xff0c;如何控制系统的访问权限。 二、控制接口访…...

【C++综合项目】——基于Boost库的搜索引擎(手把手讲解,小白一看就会!!)

目录 一、前言 二、项目的相关背景 ⚡什么是Boost库&#xff1f;⚡ ⚡什么是搜索引擎&#xff1f;⚡ ⚡为什么要做Boost搜索引擎&#xff1f;⚡ 二、搜索引擎的宏观原理 三、搜索引擎技术栈和项目环境 四、正排索引 VS 倒排索引 —— 搜索引擎的具体原理 &#x…...

强化阶段《660》和《880》哪本优先级高?

现在8月份了&#xff0c;正是考研数学复习的关键时刻&#xff0c;大家应该正在痛快的刷题&#xff01; 如果你正在做660880&#xff0c;那么这篇笔记值得花五分钟看完&#xff0c;一定会让你刷660和880的质量和速度提高一个层次&#xff01; 首先我们要知道660和880都怎么用&…...

Redis远程字典服务器(2) —— 全局命令

一&#xff0c;使用官方文档 学会使用文档&#xff0c;是一个优秀程序员的必备技能。Redis的命令非常多&#xff08;上百个&#xff09;&#xff0c;因为Redis是通过键值对存储数据的&#xff0c;key为string类型&#xff0c;但是value可以是其它的数据类型&#xff08;字符串…...

Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?

技术背景 我们知道&#xff0c;Android平台不管RTMP推送、轻量级RTSP服务模块还是GB28181设备接入模块&#xff0c;早期&#xff0c;如果需要实现截图功能&#xff0c;又不想依赖Android系统接口&#xff0c;最好的办法是&#xff0c;在底层实现快照截图。 快照截图&#xff…...

tomcat文件上传漏洞练习

1、靶场账号注册 vulfocus 注册后邮箱中点击激活 2、首页选择并开启靶场 复制映射的ip和端口 在浏览器输入ip和端口 改成put并把1.jsp中内容复制进去 3打开哥斯拉&#xff0c;连接上面的网址...

项目实战_图书管理系统(简易版)

你能学到什么 一个简单的项目——图书管理系统&#xff08;浏览器&#xff1a;谷歌&#xff09;基础版我们只做两个功能&#xff08;因为其它的功能涉及的会比较多&#xff0c;索性就放在升级版里了&#xff0c;基础版先入个门&#xff09; 登录: ⽤⼾输⼊账号,密码完成登录功…...

Gazebo之MyRobot建立

Gazebo之MyRobot建立 1. 源由2. 示例Step 1: 新建一个简单世界Step 2: 新建一个模型(model)Step 3: 机器人组成链接(Links)Step 3.1: 新增底盘(Links/Chassis)Step 3.1.1: 惯性属性(Inertial properties)Step 3.1.2: 视觉(Visual)Step 3.1.3: 碰撞(Collision) Step 3.2: 新增左…...

WPF学习(5)- Border控件(边框布局)+GridSplitter分割窗口

严格来说&#xff0c;Border并不是一个布局控件&#xff0c;因为它并不是Panel的子类&#xff0c;而是Decorator装饰器的子类&#xff0c;而Decorator继承于FrameworkElement。我们要先看看它的父类Decorator。 public class Decorator : FrameworkElement, IAddChild {public…...

ADAS芯片及方案

一 ADAS芯片及方案 1.1 高通SA8775P Snapdragon Ride Flex&#xff08;SA8775P&#xff09;舱驾融合平台可通过单颗SoC同时支持数字座舱和智能驾驶功能&#xff0c;在CPU、GPU、NPU的处理能力方面具备强大的性能表现与领先优势&#xff0c;支持实现复杂的智能座舱功能&#x…...

5 mysql 查询语句

1.DML&#xff1a;对数据进行增删改查 提示&#xff1a;Execute执行 Execute and Suppress 执行并且抑制这个警告 person表的结构 /* DML:Data Manipulation Language 数据操作语言&#xff0c;对数据进行 增删改查操作&#xff0c;因为査询的操作太频繁和复杂&#xff0c;将…...

从网络上下载并展示图像数据

一、代码 from PIL import Image import requests from io import BytesIO import matplotlib.pyplot as pltimage_url "https://www.alleycat.org/wp-content/uploads/2019/03/FELV-cat.jpg" response requests.get(image_url) # response.content 获取 HTTP 响…...

Machine-Learning 机器学习

目录 基本概念与分类 工作原理 应用领域 发展趋势 机器学习中的深度学习是如何工作的&#xff0c;以及它如何影响其他机器学习算法&#xff1f; 在机器学习中&#xff0c;哪些特定的数据预处理技术最有效&#xff0c;特别是在处理大规模数据集时&#xff1f; 强化学习在…...

CSP 2023 普及组第一轮 - CSP/S 2023初试题 基础部分解析

第 1 题 在 C 中&#xff0c;下面哪个关键字用于声明一个变量&#xff0c; 其值不能被修改?&#xff08;B) A. unsigned B. const C. static D. mutable 【const声明的变量不可修改】 第 2 题 八进制数 12345670(8) 和 07654321(8) 的和为&#xff08;D&#xff09; A. 222222…...

解锁IPython的跨平台魔法:深入探索%%script命令的神秘力量

IPython 的 %%script 魔法命令是一种强大的工具&#xff0c;它允许你在 IPython 环境中执行外部脚本。这个特性特别适用于需要在 IPython Notebook 中直接与 Web 技术交互的场景。下面我将为你详细介绍 %%script 命令的使用方法&#xff0c;并通过代码示例展示其强大功能。 一…...

如何避免项目发布后用户从浏览器WebPack中看到源码

打包前在config->index.js中设置productionSourceMap为false productionSourceMap: false,...

java学习19VUE

VUE NPM npm的全称是Node Package Manager 中文名为Node.js包管理器&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块(包)的标准。NPM可以方便地从一个全球的代码库中获取并安装Node.js模块&#xff0c;这些模块可以用于构建应用程序、…...

Redis7(四)哨兵、集群

哨兵 吹哨人巡查监控后台master主机是否故障&#xff0c;如果故障了根据投票数自动将某一个从库转换为主库&#xff0c;继续对外服务 哨兵的作用&#xff1a; 监控redis运行状态&#xff0c;包括master和slave当master宕机了&#xff0c;能自动将slave转换为master 哨兵的功能…...

校园课程助手【3】-使用枚举类封装异常优雅处理全局异常

接着2中登录模块补充一个点&#xff1a; //可以看到这里返回给前端控制器的是一个类而不是html页面public RespBean doLogin(Valid LoginVo loginVo, HttpServletRequest request,HttpServletResponse response){return userService.doLogin(loginVo, request, response);}首先…...

Appium+python自动化(八)- 认识Appium- 下章

1、界面认识 在之前安装appium的时候说过我们有两种方法安装&#xff0c;也就有两种结果&#xff0c;一种是有界面的&#xff08;客户端安装&#xff09;&#xff0c;一种是没有界面的&#xff08;终端安装&#xff09;&#xff0c;首先我们先讲一下有界面的&#xff0c;以及界…...

DeepSeek R1 V2 深度探索:开源AI编码新利器,效能与创意并进

最近&#xff0c;AI界迎来了一位神秘的“突袭者”——DeepSeek团队悄无声息地发布了其推理模型DeepSeek R1的重磅升级版V2&#xff08;具体型号R1-0528&#xff09;。这款基于MIT许可的开源模型&#xff0c;在原版R1的基础上进行了多项令人瞩目的改进&#xff0c;正以其强大的潜…...

鸿蒙仓颉语言开发实战教程:商城应用个人中心页面

又到了高考的日子&#xff0c;幽蓝君在这里祝各位考生朋友冷静答题&#xff0c;超常发挥。 今天要分享的内容是仓颉语言商城应用的个人中心页面&#xff0c;先看效果图&#xff1a; 下面介绍下这个页面的实现过程。 我们可以先分析下整个页面的布局结构。可以看出它是纵向的布…...

aardio 简单网页自动化

WebView自动化&#xff0c;以前每次重复做网页登录、搜索这些操作时都觉得好麻烦&#xff0c;现在终于能让程序替我干活了&#xff0c;赶紧记录下这个超实用的技能&#xff01; 一、初次接触WebView WebView自动化就像给程序装了个"网页浏览器"&#xff0c;第一步得…...

HarmonyOS5.0——CodeGenie:鸿蒙生态的AI编程革命​

​​CodeGenie&#xff1a;鸿蒙生态的AI编程革命​​ 华为推出的 ​​CodeGenie​​ 是集成于 DevEco Studio 的 AI 辅助编程工具&#xff0c;专为 HarmonyOS 应用开发设计。它通过深度优化 ArkTS 和 C 语言的代码生成能力&#xff0c;显著提升开发效率&#xff0c;降低鸿蒙生…...

Cell-o1:强化学习训练LLM解决单细胞推理问题

细胞类型注释是分析scRNA-seq数据异质性的关键任务。尽管最近的基础模型实现了这一过程的自动化&#xff0c;但它们通常独立注释细胞&#xff0c;未考虑批次水平的细胞背景或提供解释性推理。相比之下&#xff0c;人类专家常基于领域知识为不同细胞簇注释不同的细胞类型。为模拟…...

ASR技术(自动语音识别)深度解析

ASR技术(自动语音识别)深度解析 自动语音识别(Automatic Speech Recognition,ASR)是将人类语音转换为文本的核心技术,以下是其全面解析: 一、技术原理架构 #mermaid-svg-QlJOWpMtlGi9LNeF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:1…...

onSaveInstanceState() 和 ViewModel 在数据保存能力差异

一、设计目标差异 ​​维度​​onSaveInstanceState()ViewModel​​核心目的​​保存 ​​瞬态 UI 状态​​&#xff08;如用户输入、滚动位置&#xff09;&#xff0c;应对进程意外终止或配置变更。管理 ​​业务逻辑相关数据​​&#xff0c;在配置变更时保留数据&#xff0…...

Flutter、React Native 项目如何搞定 iOS 上架?从构建 IPA 到上传 App Store 的实战流程全解析

你可能会认为&#xff1a;用了跨平台框架&#xff08;如 Flutter 或 React Native&#xff09;&#xff0c;开发效率提高了&#xff0c;发布流程也该更轻松才对。 但当我第一次要将一个 Flutter 项目发布到 App Store 时&#xff0c;现实给了我一巴掌&#xff1a; “没有 Mac&…...

利用qcustomplot绘制曲线图

本文详细介绍了qcustomplot绘制曲线图的流程&#xff0c;一段代码一段代码运行看效果。通过阅读本文&#xff0c;读者可以了解到每一项怎么用代码进行配置&#xff0c;进而实现自己想要的图表效果。&#xff08;本文只针对曲线图&#xff09; 1 最简单的图形&#xff08;入门&…...