A function request demonstration website based on Next.js + Tailwind CSS, showcasing how to deploy Python Cloud Functions using Handler Mode on EdgeOne Pages with BaseHTTPRequestHandler.
- Standard Python Handler: Uses Python's built-in
BaseHTTPRequestHandlerfor request/response handling - Modern UI Design: Adopts black background with white text theme, using #1c66e5 as accent color
- Real-time API Demo: Integrated Python backend with interactive API call testing for all route types
- No Framework Dependency: Pure Python function without Flask, FastAPI, or other frameworks
- TypeScript Support: Complete type definitions and type safety
- Next.js 15 - React full-stack framework
- React 19 - User interface library
- TypeScript - Type-safe JavaScript
- Tailwind CSS 4 - Utility-first CSS framework
- Lucide React - Beautiful icon library
- class-variance-authority - Component style variant management
- clsx & tailwind-merge - CSS class name merging utilities
- Python 3.9+ - Cloud Functions runtime
- Handler Mode - BaseHTTPRequestHandler-based Python functions on EdgeOne Pages
python-handler-template/
βββ cloud-functions/ # Python Cloud Functions source
β βββ api/
β βββ [[default]].py # Main function entry (catch-all handler)
βββ src/
β βββ app/ # Next.js App Router
β β βββ globals.css # Global styles
β β βββ layout.tsx # Root layout
β β βββ page.tsx # Main page (API demo UI)
β βββ components/ # React components
β β βββ ui/ # UI base components
β β βββ button.tsx # Button component
β β βββ card.tsx # Card component
β βββ lib/ # Utility functions
β βββ utils.ts # Common utilities
βββ public/ # Static assets
βββ package.json # Project configuration
βββ README.md # Project documentation
- Node.js 18+
- npm or yarn
- Python 3.9+ (for local development)
npm install
# or
yarn installedgeone pages devVisit http://localhost:8088 to view the application.
edgeone pages buildThe cloud-functions/api/[[default]].py catch-all handler provides:
| Method | Path | Description |
|---|---|---|
| GET | /api/ |
Root endpoint, returns greeting |
| GET | /api/health |
Health check |
| GET | /api/info |
Function information |
| GET | /api/time |
Current server time |
| GET | /api/echo |
Echo request info |
| POST | /api/echo |
Echo POST request |
| POST | /api/json |
Handle JSON body |
| GET | /api/users/:id |
Get user by ID |
| POST | /api/users |
Create new user |
| GET | /api/search?q=... |
Search with query parameters |
- Click "Call" to test each API endpoint in real-time
- View JSON response with syntax highlighting
- Supports both GET and POST requests
The Python handler file uses the standard BaseHTTPRequestHandler class:
import json
import time
from http.server import BaseHTTPRequestHandler
class handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({
"message": "Hello from Python Cloud Function!",
"timestamp": time.time()
}).encode('utf-8'))The project uses Tailwind CSS 4 with custom color variables:
:root {
--primary: #1c66e5; /* Primary color */
--background: #000000; /* Background color */
--foreground: #ffffff; /* Foreground color */
}Uses class-variance-authority to manage component style variants with multiple preset styles.
- EdgeOne Pages Official Docs: https://pages.edgeone.ai/document/python-functions
- Next.js Documentation: https://nextjs.org/docs
- Tailwind CSS Documentation: https://tailwindcss.com/docs
- Python Documentation: https://docs.python.org/3
- Push code to GitHub repository
- Create new project in EdgeOne Pages console
- Select GitHub repository as source
- Configure build command:
edgeone pages build - Deploy project
Create cloud-functions/ folder in project root and add Python handler files:
# cloud-functions/api/[[default]].py
import json
import time
from http.server import BaseHTTPRequestHandler
class handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({
"message": "Hello from Python!",
"timestamp": time.time()
}).encode('utf-8'))This project is licensed under the MIT License - see the LICENSE file for details.