From 4963c9f831a99d1eb02110ba0fbb26d239362eac Mon Sep 17 00:00:00 2001 From: Craig Date: Fri, 8 Nov 2024 14:50:43 -1000 Subject: [PATCH] updated file structure so it is all flat --- docs/images/tutorial/file_structure_1.png | Bin 12476 -> 12349 bytes docs/tutorial.md | 37 +++++++++++++++++----- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/docs/images/tutorial/file_structure_1.png b/docs/images/tutorial/file_structure_1.png index f89bcc7dc71f7c6439c421eb14e42c68c3584563..efb98ab81bcbb7e0b56a0ae1e0cebd84dfdabe35 100644 GIT binary patch delta 9176 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 delta 9304 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 Am;e9( diff --git a/docs/tutorial.md b/docs/tutorial.md index 9ccb4b7..7b62764 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -14,7 +14,7 @@ Tutorial [code on GitHub](https://github.com/theta360developers/oppkey-ricoh-vie ## front-end HTML File -Create a barebones HTML file called `index.html`. Move the file to a sub-folder called, `views`. +Create a barebones HTML file called `index.html`. ```html @@ -61,7 +61,7 @@ Flask. ``` -At this stage, the `views/index.html` file looks like this. +At this stage, the `index.html` file looks like this. ```html @@ -108,15 +108,20 @@ a `secrets.env` file. ## back-end Python file Create a new python file in the same directory called `server.py` in the -same directory as the `views` folder. It is one level higher than -the `index.html` file. - -![file structure](images/tutorial/file_structure_1.png) +same directory as the `index.html` file. Create virtual environment. `python -m venv venv` +Activate virtual environment. + +`source venv/bin/activate` + +The file structure will look like this. + +![file structure](images/tutorial/file_structure_1.png) + Install dependencies. `pip install PyJWT Flask python-dotenv requests` @@ -132,8 +137,7 @@ from dotenv import load_dotenv load_dotenv("secrets.env") app = Flask(__name__) -app.template_folder = "views" -app.static_folder = "public" +app.template_folder = "." # Retrieve environment variables PRIVATE_KEY = os.getenv("PRIVATE_KEY") @@ -155,6 +159,17 @@ if __name__ == "__main__": At this stage, if you open the browser, you will just have a black screen. You won't be able to see the image because you still need to pass the viewer the `token` and the `contentId` +You can test the server with: + +```text +python server.py +* Serving Flask app 'server' + * Debug mode: on +WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://127.0.0.1:3000 +Press CTRL+C to quit +``` + ![bare web page](images/tutorial/bare_web_page.png) ### creating the token for the RICOH360 Viewer @@ -184,6 +199,12 @@ def index(): return render_template("index.html", token=token) ``` +Run the server and test it again to make sure the token is being created. + +### token display challenge + +As a challenge, display the token on your HTML page using this syntax `{{name_of_token_variable}}` + ### accessing content To get the content, you first need to generate a token