In the end, what I did was :
Set up a WMS server (QGIS server).
Use Leaflet on the client side for displaying the map (WMS overlay layer and the background layers - Google Maps, OpenStreetMap) in the browser.
Use Django as a proxy for the WMS server : the queries from Leaflet are hence sent to the Django server who does the user authentication and rights ...
I've used RGraph to make custom charts. I consider RGraph an undervalued tool, with tons of options and details. By default is not very nice, but if you just mimic the Google Chart colors and tinker a bit, your graphs become "cute and good enough". Also, lots of demos, examples and good documentation.