π» ΠΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Π½Π° Python Π² HTML? π
ΠΠ»Ρ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ Python Π² HTML ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π³ - <script>. Π‘Π»Π΅Π΄ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Π½ΠΈΠΆΠ΅, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Python Π² ΡΠ°ΠΉΠ» HTML:
<script type="text/python">
# ΠΠ°Ρ ΠΊΠΎΠ΄ Python Π·Π΄Π΅ΡΡ
print("ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!")
</script>
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ ΡΠΊΡΠΈΠΏΡΠ° "text/python". ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Π°Ρ ΠΊΠΎΠ΄ Python Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΠΏΠΈΡΠ°ΡΡ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄ Π² HTML
ΠΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ Π² ΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΡΡΠ°ΡΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄ Π² HTML! ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄Π° Π² HTML ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ.
1. ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄Π° Π² HTML Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ CGI
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄Π° Π² HTML - ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ CGI (Common Gateway Interface). CGI ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΈΡΠΎΠ½ ΡΠΊΡΠΈΠΏΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ CGI ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΈΡΠΎΠ½ ΡΠΊΡΠΈΠΏΡ.
import cgi
print("Content-Type: text/html")
print()
print("Hello, World!
")
Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .py (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, script.py), ΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ Π΅Π³ΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ CGI. ΠΠ°ΡΠ΅ΠΌ Π² HTML-ΡΠ°ΠΉΠ»Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΈΡΠΎΠ½ ΡΠΊΡΠΈΠΏΡΠ°:
<html>
<body>
<h1>ΠΡΠΈΠ²Π΅Ρ! ΠΡΠΎ ΠΌΠΎΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° ΠΏΠΈΡΠΎΠ½Π΅</h1>
<!--#include virtual="/cgi-bin/script.py" -->
</body>
</html>
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΡΠΎΡΠΊΡ ΠΊΠΎΠ΄Π° <!--#include virtual="/cgi-bin/script.py" -->. ΠΠ½Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠΎΠ½ ΡΠΊΡΠΈΠΏΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅. ΠΠΎΠ³Π΄Π° ΡΡΠΎΡ HTML-ΡΠ°ΠΉΠ» Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΠΎΡΠ΅Π½, ΡΠ΅ΡΠ²Π΅Ρ Π·Π°ΠΏΡΡΡΠΈΡ ΠΏΠΈΡΠΎΠ½ ΡΠΊΡΠΈΠΏΡ ΠΈ Π²ΠΊΠ»ΡΡΠΈΡ Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² HTML-ΡΡΡΠ°Π½ΠΈΡΡ.
2. ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄Π° Π² HTML Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΠΎΠ²
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄Π° Π² HTML - ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΠΎΠ². Π¨Π°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ HTML-ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄Π°. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΡ Π² ΠΏΠΈΡΠΎΠ½Π΅ Π²ΠΊΠ»ΡΡΠ°ΡΡ Jinja2, Django Templates ΠΈ Mako.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΠ° Jinja2:
from jinja2 import Template
template = Template("<h1>Hello, {{ name }}!</h1>")
print(template.render(name="John"))
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°Π±Π»ΠΎΠ½ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ "name" ΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΡ Π΅Π³ΠΎ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "John". Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ HTML-ΡΡΡΠ°Π½ΠΈΡΠ° Ρ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ΠΌ "Hello, John!".
Π HTML-ΡΠ°ΠΉΠ»Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
<html>
<body>
<h1>ΠΡΠΈΠ²Π΅Ρ, {{ name }}! ΠΡΠΎ ΠΌΠΎΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° ΠΏΠΈΡΠΎΠ½Π΅</h1>
</body>
</html>
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° "{{ name }}". Π¨Π°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ Π·Π°ΠΌΠ΅Π½ΠΈΡ ΡΡΠΎΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ "name", ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΏΡΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π΅.
3. ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄Π° Π² HTML Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ JavaScript
Π’ΡΠ΅ΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄Π° Π² HTML - ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ JavaScript. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ AJAX ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΈΡΠΎΠ½ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ JavaScript Ρ AJAX:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("result").innerHTML = this.responseText;
}
};
xhttp.open("GET", "/path/to/python_script.py", true);
xhttp.send();
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ JavaScript ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ GET-Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΈΡΠΎΠ½ ΡΠΊΡΠΈΠΏΡ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΏΡΡΠ΅ΠΌ. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΊΡΠΈΠΏΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ "result".
Π HTML-ΡΠ°ΠΉΠ»Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
<html>
<body>
<h1>ΠΡΠΈΠ²Π΅Ρ! ΠΡΠΎ ΠΌΠΎΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° ΠΏΠΈΡΠΎΠ½Π΅</h1>
<div id="result"></div>
<script src="script.js"></script>
</body>
</html>
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π³ <script src="script.js"></script>. ΠΠ΄Π΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π²Π°Ρ JavaScript-ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ AJAX-Π·Π°ΠΏΡΠΎΡ. Π€Π°ΠΉΠ» "script.js" Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ JavaScript.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄Π° Π² HTML. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ CGI Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠΈΡΠΎΠ½ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ HTML-ΡΡΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ JavaScript Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΈΡΠΎΠ½ ΡΠΊΡΠΈΠΏΡΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ AJAX. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΡΠΈΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ .
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠ° ΡΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°ΡΡ ΠΏΠΈΡΠΎΠ½ ΠΊΠΎΠ΄ Π² HTML. ΠΡΠ°ΠΊΡΠΈΠΊΡΠΉΡΠ΅ΡΡ, ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΈΡΠΎΠ½!