/ / Flask: Ustaw plik cookie sesji na podstawie nazwy domeny - python, flask, zmienne sesji, sesyjne pliki cookie

Flask: Ustaw plik cookie sesji na podstawie nazwy domeny - python, kolba, zmienne sesji, pliki cookie sesji

Jestem nowy w flask i python i pracuję nadprojekt, w którym mamy stronę internetową, do której można dotrzeć za pośrednictwem dwóch różnych domen. Baza kodu jest taka sama, ale domeny są inaczej oznakowane. Będę musiał załadować arkusz stylów specyficzny dla domeny i w kilku blokach szablonów, będę musiał użyć niektórych warunków, aby wyświetlać tylko niektóre treści, jeśli jestem w określonej domenie.

Myślę, że najlepszym sposobem na to jest stworzeniezmienna sesji oparta na domenie (mile widziane inne sugestie). Ustawia się, gdy odwiedzający wchodzi do jednej z domen, a następnie mogę użyć warunkowej, aby załadować odpowiedni arkusz stylów / blok kodu.

Mam problem z uruchomieniem tego. Obecnie w moim pliku app.py mam zmienną sesji „klienta” ustawioną na podstawie parametrów adresu URL, które są wywoływane przed każdym żądaniem:

@app.before_request
def set_client_session():
if "client" in request.args:
session["client"] = request.args["client"]

Jak ustawić go za pomocą domeny zamiast parametrów adresu URL i jak mogę sprawdzić jego wartość w szablonie, aby warunkowo załadować arkusz stylów / blok kodu?

Pełny plik app.py:

import os
import json
from flask import Flask, session, request, render_template

app = Flask(__name__)

# Generate a secret random key for the session
app.secret_key = os.urandom(24)

@app.before_request
def set_client_session():
if "client" in request.args:
session["client"] = request.args["client"]

@app.route("/")
def index():
return render_template("index.html")

@app.route("/edc")
def abc():
return render_template("pages/abc.html")

@app.route("/success")
def success():
return render_template("success.html")

@app.route("/contact")
def contact():
return render_template("pages/contact.html")

@app.route("/privacy")
def privacy():
return render_template("pages/privacy.html")

@app.route("/license")
def license():
return render_template("pages/license.html")

@app.route("/install")
def dcm_download():
return render_template("pages/install.html")

@app.route("/uninstall")
def uninstall():
return render_template("pages/uninstall.html")

if __name__ == "__main__":
app.run(debug=True)

Odpowiedzi:

4 dla odpowiedzi № 1

Możesz uzyskać dostęp do domeny / nazwy hosta za pomocą request.headers["Host"] a następnie ustaw na sesję.

@app.before_request
def set_domain_session():
session["domain"] = request.headers["Host"]

Również, request.url_root poda domenę i protokół w razie potrzeby. (na przykład. http://domain.com/)

Następnie w szablonach jinja2 możesz uzyskać dostęp do zmiennej sesji i sprawdzić domenę.

{% if session.domain == "domain1.com" %}
<link rel="stylesheet" href="{{ url_for("static", filename="css/domain1.css") }}">
{% else %}
<link rel="stylesheet" href="{{ url_for("static", filename="css/domain2.css") }}">
{% endif %}