A Cookiecutter template for building Python apps that will run as statically-served web pages
The easiest way to use this project is to not use it at all - at least, not
directly. Briefcase is a tool that
uses this template, rolling it out using data extracted from a
pyproject.toml
configuration file.
However, if you do want use this template directly...
Install cookiecutter. This is a tool used to bootstrap complex project templates:
$ pip install cookiecutter
Run
cookiecutter
on the template:$ cookiecutter https://github.com/beeware/briefcase-web-static-template
This will ask you for a number of details of your application, including the name of your application (which should be a valid PyPI identifier), and the Formal Name of your application (the full name you use to describe your app). The remainder of these instructions will assume a name of
my-project
, and a formal name ofMy Project
.Build a wheel for your project, and add it to
www/static/wheels
.Add wheels for any additional project requirements to
www/static/wheels
.Add a file named
www/pyscript.toml
to configure the PyScript interpreter. At a minimum, it should include apackages
declaration that includes all the wheels in thewww/static/wheels
folder.
If you've done this correctly, a project with a formal name of My Project
,
with an app name of my-project
should have a directory structure that
looks something like:
My Project/ app/ ... www/ static/ css/ briefcase.css wheels/ my_project-0.0.1-py3-none-any.whl other-1.2.3-py3-none-any.whl favicon.png index.html pyscript.toml briefcase.toml
with www/pyscript.toml
containing:
packages = [ "my_project-0.0.1-py3-none-any.whl", "other-1.2.3-py3-none-any.whl", ]
You should now be able to serve the www folder as a static website:
$ python -m httpd.server --directory www
Of course, running Python code isn't very interesting by itself - you'll be able to output to the web console, but that won't be visible to most users.
When the page loads, it will attempt to run my_project
as a module (i.e.,
the equivalent of running python -m my_project
from the command line).
To do something interesting, you'll need to add some DOM objects. You can use PyScript APIs to manipulator the DOM.
Alternatively, you could use a cross-platform widget toolkit that supports the web as a target (such as Toga) to provide a GUI for your application.