Estimated reading time: 3 minutes
Are you developing a website and looking to execute some Python script directly from the website?
Here we take you through how to achieve this using Python Flask, the scenarios we demonstrate are as follows:
- Javascript on load event – execute Python script
- Javascript on click event – execute a Python script
In both scenarios above you will be presented with pop-up boxes like below, but the python code can be changed to whatever you like.
The code you will need to run this is split into two. (A) The Index.HTML logic and (B) the app.py logic
The code for the INDEX.HTML page
This is the page that the user is presented with. As you can see the logic has two pieces of javascript that when run, go over to the python code and run some logic that it wishes the webpage to run.
In this instance, the app.py python script holds the commands that need to be executed.
Note the page load event goes to the route in app.py, namely ” @app.route(‘/’)”
Whereas the button click event is pointed directly at “@app.route(‘/test’ )” – essentially this will not run until the javascript asks it to, on the button click event.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sample Home Page</title>
</head>
<body>
<! -- Calls a function on the page load. -- >
<element onload="myfunction_onload">
<button type="submit" onclick='myfunction_clickevent()'>Run my Python!</button>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<! -- This script runs the python script on the page load -->
<script>
function myfunction_onload(){
$.ajax({
url: "app.py",
context: document.body
})
}
</script>
<! -- This script runs the python script when the button is clicked -->
<script>
function myfunction_clickevent(){
$.ajax({
url:"/test",
context: document.body});}
</script>
</body>
</html>
The code for the APP.PY Python script
Here we are linking to the index.html page and taking commands from it and executing those requests.
In this scenario, the message boxes are rendered by using the win32api package.
The app is using the flask package to run the website.
The powerful thing here is you can start customising this logic to do what you like, examples include:
(A) Return graphs to the webpage.
(B) Process data received and return statistics on the data.
(C) Validate data received in Python and return a response. An example here could be a user logging into a database.
import win32api
from flask import Flask, render_template
app = Flask(__name__)
#Using the below, the popup message appears on the page load of index.html
#0x00001000 - This makes the popup appear over the browser window
@app.route('/')
def index():
win32api.MessageBox(0, 'You have just run a python script on the page load!', 'Running a Python Script via Javascript', 0x00001000)
return render_template('index.html')
#Using the below, the popup message appears when the button is clicked on the webpage.
#0x00001000 - This makes the popup appear over the browser window
@app.route('/test')
def test():
win32api.MessageBox(0, 'You have just run a python script on the button press!', 'Running a Python Script via Javascript', 0x00001000)
return render_template('index.html')
if __name__ == "__main__":
app.run(debug=True)