commit
a50db20eaa
5 changed files with 116 additions and 0 deletions
@ -0,0 +1,21 @@ |
|||||
|
from flask import Flask, jsonify, send_from_directory |
||||
|
app = Flask(__name__, static_folder="public", static_url_path="") |
||||
|
@app.route("/") |
||||
|
def serve_index(): |
||||
|
return send_from_directory(app.static_folder, "index.html") |
||||
|
@app.route("/api/data") |
||||
|
def api_data(): |
||||
|
data = { |
||||
|
"product_name": "古新枣木梳", |
||||
|
"description": "采用古新枣木手工打造,质地坚硬,纹理美观,传承千年工艺。", |
||||
|
"benefits": [ |
||||
|
"天然材质,温和护发", |
||||
|
"手工雕刻,工艺精湛", |
||||
|
"传承文化,寓意吉祥" |
||||
|
], |
||||
|
"price": "¥99", |
||||
|
"image_url": "/images/comb.jpg" |
||||
|
} |
||||
|
return jsonify(data) |
||||
|
if __name__ == "__main__": |
||||
|
app.run(debug=True, port=80) |
After Width: | Height: | Size: 978 KiB |
@ -0,0 +1,19 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
<title>古新枣木梳</title> |
||||
|
<link rel="stylesheet" href="style.css"> |
||||
|
</head> |
||||
|
<body> |
||||
|
<div class="container"> |
||||
|
<h1 id="product-name"></h1> |
||||
|
<img id="product-image" class="product-image" src="" alt="古新枣木梳"> |
||||
|
<p id="description"></p> |
||||
|
<ul id="benefits" class="benefits"></ul> |
||||
|
<p id="price" class="price"></p> |
||||
|
</div> |
||||
|
<script src="script.js"></script> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,19 @@ |
|||||
|
document.addEventListener("DOMContentLoaded", () => { |
||||
|
fetch("/api/data") |
||||
|
.then(response => response.json()) |
||||
|
.then(data => { |
||||
|
document.getElementById("product-name").innerText = data.product_name; |
||||
|
document.getElementById("product-image").src = data.image_url; |
||||
|
document.getElementById("description").innerText = data.description; |
||||
|
const benefitsList = document.getElementById("benefits"); |
||||
|
data.benefits.forEach(benefit => { |
||||
|
const li = document.createElement("li"); |
||||
|
li.innerText = benefit; |
||||
|
benefitsList.appendChild(li); |
||||
|
}); |
||||
|
document.getElementById("price").innerText = data.price; |
||||
|
}) |
||||
|
.catch(error => { |
||||
|
console.error("Error fetching data:", error); |
||||
|
}); |
||||
|
}); |
@ -0,0 +1,57 @@ |
|||||
|
body { |
||||
|
font-family: Arial, sans-serif; |
||||
|
margin: 0; |
||||
|
padding: 0; |
||||
|
background-color: #f5f5f5; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
height: 100vh; |
||||
|
} |
||||
|
|
||||
|
.container { |
||||
|
background: white; |
||||
|
padding: 20px; |
||||
|
border-radius: 10px; |
||||
|
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); |
||||
|
text-align: center; |
||||
|
width: 80%; |
||||
|
max-width: 600px; |
||||
|
} |
||||
|
|
||||
|
h1 { |
||||
|
color: #333; |
||||
|
} |
||||
|
|
||||
|
.product-image { |
||||
|
width: 100%; |
||||
|
height: auto; |
||||
|
border-radius: 10px; |
||||
|
margin: 20px 0; |
||||
|
} |
||||
|
|
||||
|
p { |
||||
|
color: #666; |
||||
|
font-size: 16px; |
||||
|
line-height: 1.5; |
||||
|
} |
||||
|
|
||||
|
.benefits { |
||||
|
list-style: none; |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
.benefits li { |
||||
|
background: #e0e0e0; |
||||
|
margin: 10px 0; |
||||
|
padding: 10px; |
||||
|
border-radius: 5px; |
||||
|
color: #333; |
||||
|
font-size: 14px; |
||||
|
} |
||||
|
|
||||
|
.price { |
||||
|
color: #ff5722; |
||||
|
font-size: 24px; |
||||
|
font-weight: bold; |
||||
|
} |
Loading…
Reference in new issue