I am following this Network Chuck YT video to learn basic Python Flask. I got the app working, but I am running it inside an Ubuntu "multipass" VM, so it cannot use the loopback address, 127.0.0.1. When the app launches from the IPv4 address on port 8080 (currently 192.168.64.5) and it works fine on initial launch, but the IP of the Ubuntu VM can (and will) change, so I don't want to hardcode it, if possible.
Here is my Python Flask code:
#!/bin/python
from flask import Flask, render_template
import requests
import json
app = Flask(__name__)
def get_meme():
sr = "/wholesomememes"
url = "https://meme-api.herokuapp.com/gimme" sr
url = "https://meme-api.herokuapp.com/gimme"
response = json.loads(requests.request("GET", url).text)
meme_large = response["preview"][-2]
subreddit = response["subreddit"]
return meme_large, subreddit
@app.route("/")
def index():
meme_pic,subreddit = get_meme()
return render_template("meme_index.html", meme_pic=meme_pic, subreddit=subreddit)
app.run(host="192.168.64.5", port=8080)
Here is my HTML for the webpage:
<html>
<head>
<title>Meme Website</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="refresh" content="30;url=http://192.168.64.5:8080/" />
<style>
body {background-color:#000000;background-repeat:no-repeat;background-position:top-left}
h1 {text-align:center; font-family:Arial, sans-serif; color:#FFFFFF; background-color:#000000}
p {text-align:center;font-family:Georgia, serif; color:#FFFFFF; font-size:48px;font-style:normal}
</style>
</head>
<body>
<h1>A website to gather some memes!</h1>
<p>Here is your meme! This will refresh in 30 seconds!</p>
<p><img src="{{meme_pic}}"></p>
<p>Current subredddit: {{subreddit}} </p>
</body>
</html>
Is it possible to not hardcode the IPv4 address in either the Python Flask app or the HTML file?
UPDATE - final, fixed code here:
https://gitlab.com/kidacrimson/flask-memes
CodePudding user response:
Usually servers can use host="0.0.0.0" to accept clients from all Network Cards installed in computer - lan, wifi and loopback (127.0.0.1).
And pages can use urls like url=/ without http://192.168.64.5:8080
