Python Flask:基于域名设置会话cookie

Python Flask:基于域名设置会话cookie,python,flask,session-variables,session-cookies,Python,Flask,Session Variables,Session Cookies,我是flask和python的新手,正在从事一个项目,我们有一个可以通过两个不同域访问的网站。代码库是相同的,但域的品牌不同。我需要加载一个特定于域的样式表,在几个模板块中,如果我在某个域中,我需要使用一些条件来仅显示一些内容 我认为最好的方法是基于域创建一个会话变量(欢迎其他建议)。当访问者进入其中一个域时,它会被设置,然后我可以使用条件加载适当的样式表/代码块 但是我很难让它工作。现在在我的app.py文件中,我有一个“client”会话变量,该变量是根据每个请求之前调用的url参数设置的:

我是flask和python的新手,正在从事一个项目,我们有一个可以通过两个不同域访问的网站。代码库是相同的,但域的品牌不同。我需要加载一个特定于域的样式表,在几个模板块中,如果我在某个域中,我需要使用一些条件来仅显示一些内容

我认为最好的方法是基于域创建一个会话变量(欢迎其他建议)。当访问者进入其中一个域时,它会被设置,然后我可以使用条件加载适当的样式表/代码块

但是我很难让它工作。现在在我的app.py文件中,我有一个“client”会话变量,该变量是根据每个请求之前调用的url参数设置的:

@app.before_request
def set_client_session():
    if 'client' in request.args:
        session['client'] = request.args['client']
如何使用域而不是URL参数设置它,如何在模板中检查它的值,以便有条件地加载样式表/代码块

完整的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)

您可以使用
request.headers['Host']
访问域/主机名,然后将其设置为会话

@app.before_request
def set_domain_session():
    session['domain'] = request.headers['Host']
另外,
request.url\u root
将为您提供域和协议,以备您需要。(例如
http://domain.com/

然后在jinja2模板中,您可以访问会话变量并检查域

{% 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 %}
{%if session.domain=='domain1.com%}
{%else%}
{%endif%}

您可以使用
request.headers['Host']
访问域/主机名,然后将其设置为会话

@app.before_request
def set_domain_session():
    session['domain'] = request.headers['Host']
另外,
request.url\u root
将为您提供域和协议,以备您需要。(例如
http://domain.com/

然后在jinja2模板中,您可以访问会话变量并检查域

{% 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 %}
{%if session.domain=='domain1.com%}
{%else%}
{%endif%}

域设置正确,但条件设置不正确。我正在本地开发服务器上工作,所以现在域是localhost:5000。当我检查session.domain的值是否为'localhost:5000'时,它返回false。如果我只检查是否存在session.domain,它将返回true。当我输出{session.domain}时,它肯定是localhost:5000,因此出于某种原因,检查session.domain='localhost:5000'是否不工作。非常奇怪。我只是亲自测试了一下,确认它工作得很好。
{{session.domain=='localhost:5000'}}
平等性检查在我这端返回True。这很愚蠢,但是试着做
{{'a'='a'}}
,看看它是否返回True或not域设置正确,但条件设置不正确。我正在本地开发服务器上工作,所以现在域是localhost:5000。当我检查session.domain的值是否为'localhost:5000'时,它返回false。如果我只检查是否存在session.domain,它将返回true。当我输出{session.domain}时,它肯定是localhost:5000,因此出于某种原因,检查session.domain='localhost:5000'是否不工作。非常奇怪。我只是亲自测试了一下,确认它工作得很好。
{{session.domain=='localhost:5000'}}
平等性检查在我这端返回True。这很愚蠢,但是试着做
{{'a'='a'}}
,看看它是否返回True