This tutorial will guide you through building the video server present
examples/video directory. This is a very simple app that
responds conditionally to the requests i.e. it will allow the HTML
video tag to work correctly.
Running the example¶
To run the example, in
examples/video the following should start
the server, (see Installation first),
$ export QUART_APP=video:app $ quart run
the video is then available at http://localhost:5000/. Note you will need to place a video file
video.mp4 alongside the
video.py file for this to work.
Quart by default expects the code to be structured in a certain way in order for templates and static file to be found. This means that you should structure the video app as follows,
video/ video/templates/ video/video.mp4
doing so will also make your project familiar to others, as you follow the same convention.
It is always best to run python projects with a pipenv, which should be created and activated as follows,
$ cd video $ pipenv install quart
for this video we will only need Quart. Now pipenv can be activated,
$ pipenv shell
3: Conditional Responses¶
Conditional responses allow the server to send only the data that the
client has requested. The client indicates this by attaching a
Range header to the request, which can be retrieved manually via,
range = request.range range.units # Usually bytes range.ranges # List of requests ranges
as hinted this is quite common for videos, given the large size.
A server doesn’t have to respond conditionally, and can in fact always
send the entire file. As it is optional you have to choose to use it,
method. Like so,
response = await send_file(...) # Or any response await response.make_conditional(request.range)
as a client you can tell the difference via the status code, 200 is the full response and 206 a partial response.
The example files contain this entire tutorial and a little more, so they are now worth a read. Hopefully you can now go ahead and create and serve videos or any other file conditionally.