Getting a chance to work on Python, my favorite framework is Flask (http://flask.pocoo.org/). It is a micro-framework that lets you create and deploy APIs, websites, and dashboards.
When deploying Flask projects onto a production server, we need to only support HTTPS and redirect HTTP requests to HTTPS. This creates a problem with Flask url_for function, which only outputs HTTP URLs.
Below is one way to achieve this. Following is taken from my production deployment.
import os from flask import Flask app = Flask(__name__) @app.before_request def before_request(): if os.environ["PROJECT_ENV"] != "dev": from flask import _request_ctx_stack if _request_ctx_stack is not None: reqctx = _request_ctx_stack.top reqctx.url_adapter.url_scheme = "https" if __name__ == "__main__": app.run(port=80, host="0.0.0.0")
Update: 8 June 2017
I have found another way of adding https support to flask.
from flask import Flask class ReverseProxied(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): environ['wsgi.url_scheme'] = 'https' return self.app(environ, start_response) app = Flask(__name__) app.wsgi_app = ReverseProxied(app.wsgi_app) if __name__ == "__main__": app.run(port=80, host="0.0.0.0")
This was mentioned in stack overflow post:
https://stackoverflow.com/a/37842465
Let me know if you have a better approach to this problem.
I’m really suprised to hear that Flash doesn’t have better support for HTTPS. Thanks for providing us with a work around!
LikeLike
Yeah, this is true. I had to use the workaround for adding https support. P.S. I have updated the article with an alternate approach also.
LikeLiked by 1 person