之前已经折腾了:
之后,接着继续去:
想办法搭建一个web页面,
且集成到Flask中
或者单独用nginx去render
web页面中,有个输入框:输入问题(文字)
有个输出:
- 有个文本框,显示文字,答案
- 有个播放器,播放一个音频文件,传入文件到url绝对路径
- 且内部有一定的逻辑:
- control是stop:暂停播放(如果当前正在播放的话)
- control是continue:继续当前播放(如果之前有被暂停的播放的话)
对于前端页面,暂时就用普通的js,jquery去实现。
暂不去搞太复杂的js框架(react,vue)了。
UI方面,本来考虑bootstrap,经过:
还是决定用Bootstrap
先去下载:



参考:
去拷贝html,先放到flask的static文件夹:

先自己本地慢慢测试。

通过:
去找example的例子
然后用代码:
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous"> <link rel="stylesheet" href="css/main.css"> <title>xxx英语智能机器人演示</title> </head> <div class="logo text-center"> <img class="mb-4" src="pic/logo_transparent_183x160.png" alt="xxx Logo" width="72" height="72"> </div> <h2>xxx英语智能机器人</h2> <!-- <p>用于演示智能对话</p> <button type="button" class="btn btn-primary">提交对话</button> <input class="btn btn-primary" type="submit" value="提交对话" /> <button type="button" class="btn btn-primary btn-lg">提交对话</button> <button type="button" class="btn btn-primary btn-lg btn-block">提交对话</button> <div class="input-group"> <input type="text" class="form-control" placeholder="请输入您要说的话" aria-label="Recipient's username" aria-describedby="basic-addon2"> <div class="input-group-append"> <button class="btn btn-primary btn-lg" type="button">提交</button> <button class="btn btn-outline-secondary btn-sm" type="button">清除</button> </div> </div> --> <form> <div class="form-group input_request"> <input type="text" class="form-control" id="inputRequest" placeholder="请输入您要说的话"> </div> <div class="form-group"> <button type="submit" class="btn btn-primary btn-lg col-sm-3">提交</button> <button class="btn btn-secondary btn-lg col-sm-3" type="button">清除</button> </div> </form> <div class="output text-center bg-light box-shadow mx-auto" style="width: 96%; height: 160px; border-radius: 21px 21px 0 0; padding-top: 20px;"> <p>as a book-collector, i have the story you just want to listen!</p> </div> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script> <!-- <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script> --> <script src="js/bootstrap.js"></script> </body> </html>

效果:


所以,暂时界面先弄到这里,要去搞清楚:
再去搞懂:
【已解决】jquery的js中如何设置html元素的值
然后再去:
【已解决】jquery的js中把json对象转换为格式化后的带缩进的json字符串
嫌弃不够美观,所以再想办法去高亮:
【已解决】js中如何把输出的json代码高亮显示
截止目前相关代码为:
static/robotDemo.html
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous"> <!-- <link rel="stylesheet" href="css/highlightjs_default.css"> --> <link rel="stylesheet" href="css/highlight_atom-one-dark.css"> <!-- <link rel="stylesheet" href="css/highlight_monokai-sublime.css"> --> <link rel="stylesheet" href="css/main.css"> <title>xxx英语智能机器人演示</title> </head> <div class="logo text-center"> <img class="mb-4" src="pic/logo_transparent_183x160.png" alt="xxx Logo" width="72" height="72"> </div> <h2>xxx英语智能机器人</h2> <form> <div class="form-group input_request"> <input id="inputRequest" type="text" class="form-control" placeholder="请输入您要说的话" value="i want to hear the story of apple"> </div> <div class="form-group"> <button id="submitInput" type="submit" class="btn btn-primary btn-lg col-sm-3">提交</button> <button id="clearInput" class="btn btn-secondary btn-lg col-sm-3" type="button">清除</button> </div> </form> <div id="response" class="bg-light box-shadow mx-auto"> <pre><code class="json">here will output response</code></pre> </div> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="js/jquery-3.3.1.js"></script> <!-- <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> --> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script> <script src="js/bootstrap.js"></script> <script src="js/highlight.js"></script> <script src="js/main.js"></script> </body> </html>
static/css/main.css
.logo{
padding: 10px 2%;
}
h2{
text-align: center;
margin-top: 0;
margin-bottom: 40px;
}
form {
text-align: center;
}
.form-group {
padding-left: 2%;
padding-right: 2%;
}
#response {
width: 96%;
height: 380px;
border-radius: 10px;
padding-top: 20px;
}static/js/main.js
$(document).ready(function(){
// when got response json, update to highlight it
function updateHighlight() {
console.log("updateHighlight");
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
}
updateHighlight();
$("#submitInput").click(function(event){
event.preventDefault();
ajaxSubmitInput();
});
function ajaxSubmitInput() {
console.log("ajaxSubmitInput");
var inputRequest = $("#inputRequest").val();
console.log("inputRequest=%s", inputRequest);
var encodedInputRequest = encodeURIComponent(inputRequest)
console.log("encodedInputRequest=%s", encodedInputRequest);
var qaUrl = "http://xxx:32851/qa";
console.log("qaUrl=%s", qaUrl);
var fullQaUrl = qaUrl + "?input=" + encodedInputRequest
console.log("fullQaUrl=%s", fullQaUrl);
$.ajax({
type : "GET",
url : fullQaUrl,
success: function(respJsonObj){
console.log("respJsonObj=%o", respJsonObj);
// var respnJsonStr = JSON.stringify(respJsonObj);
//var beautifiedJespnJsonStr = JSON.stringify(respJsonObj, null, '\t');
var beautifiedJespnJsonStr = JSON.stringify(respJsonObj, null, 2);
console.log("beautifiedJespnJsonStr=%s", beautifiedJespnJsonStr);
var prevOutputValue = $('#response').text();
console.log("prevOutputValue=%o", prevOutputValue);
var afterOutputValue = $('#response').html('<pre><code class="json">' + beautifiedJespnJsonStr + "</code></pre>");
console.log("afterOutputValue=%o", afterOutputValue);
updateHighlight();
},
error : function(err) {
$("#output").html("<strong>Error</strong>");
console.log("GET: ", qaUrl, " ERROR: ", err);
}
});
}
$("#clearInput").click(function(event){
// event.preventDefault();
console.log("event=%o", event);
$('#inputRequest').val("");
$('#response').html('<pre><code class="json">here will output response</code></pre>');
updateHighlight();
});
});运行效果:

点击提交:

点击清除:

接下来,还要再去,加上音频播放器:
转载请注明:在路上 » 【已解决】本地搭建前端Web页面实现机器人问答的产品演示