space / app.py
AntDX316
updated
a1ba68f
raw
history blame
4.08 kB
from flask import Flask, render_template, request, jsonify
from flask_cors import CORS
import os
import datetime
app = Flask(__name__)
CORS(app) # Enable CORS for all routes
# Ensure templates directory exists
os.makedirs('templates', exist_ok=True)
@app.route('/')
def index():
"""Render the home page."""
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return render_template('index.html', current_time=current_time)
@app.route('/api/time')
def get_time():
"""API endpoint that returns the current time."""
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return jsonify({"time": current_time})
@app.route('/api/echo', methods=['POST'])
def echo():
"""API endpoint that echoes back the JSON data sent to it."""
data = request.json
return jsonify({"status": "success", "echo": data})
if __name__ == '__main__':
# Create templates directory if it doesn't exist
if not os.path.exists('templates'):
os.makedirs('templates')
# Create a simple HTML template if it doesn't exist
if not os.path.exists('templates/index.html'):
with open('templates/index.html', 'w') as f:
f.write('''
<!DOCTYPE html>
<html>
<head>
<title>Flask Web App on Hugging Face Spaces</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
line-height: 1.6;
}
.container {
border: 1px solid #ddd;
border-radius: 5px;
padding: 20px;
margin-top: 20px;
}
button {
background-color: #4CAF50;
color: white;
padding: 10px 15px;
border: none;
border-radius: 4px;
cursor: pointer;
margin-right: 10px;
}
button:hover {
background-color: #45a049;
}
pre {
background-color: #f5f5f5;
padding: 10px;
border-radius: 4px;
overflow-x: auto;
}
</style>
</head>
<body>
<h1>Welcome to Flask Web App on Hugging Face Spaces</h1>
<p>The current server time is: {{ current_time }}</p>
<div class="container">
<h2>API Demo</h2>
<button id="getTimeBtn">Get Current Time</button>
<button id="sendEchoBtn">Send Echo Request</button>
<div id="result">
<pre id="output">Results will appear here...</pre>
</div>
</div>
<script>
document.getElementById('getTimeBtn').addEventListener('click', async () => {
try {
const response = await fetch('/api/time');
const data = await response.json();
document.getElementById('output').textContent = JSON.stringify(data, null, 2);
} catch (error) {
document.getElementById('output').textContent = 'Error: ' + error.message;
}
});
document.getElementById('sendEchoBtn').addEventListener('click', async () => {
try {
const testData = {
message: "Hello from the client!",
timestamp: new Date().toISOString()
};
const response = await fetch('/api/echo', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(testData)
});
const data = await response.json();
document.getElementById('output').textContent = JSON.stringify(data, null, 2);
} catch (error) {
document.getElementById('output').textContent = 'Error: ' + error.message;
}
});
</script>
</body>
</html>
''')
# Run the Flask app with settings suitable for Hugging Face Spaces
app.run(host='0.0.0.0', port=7860, debug=True)