


Configurer plusieurs noms de sous-domaines dans le framework Flask de Python
Flask子域名
一般用于数量比较少的子域名,一个模块对应一个子域名。先看下面一个例子:
modules.py:
from flask import Blueprint public = Blueprint('public', __name__) @public.route('/') def home(): return 'hello flask' app.py: app = Flask(__name__) app.config['SERVER_NAME'] = 'example.com' from modules import public app.register_blueprint(public, subdomain='public')
现在可以通过public.example.com/来访问public模块了。
通配符子域
通配符子域,即通过一个模块来匹配很多个子域名。比如某些网站提供的个性化域名功能,就是这种形式。
先来看段示例代码:
modules.py:
from flask import Blueprint member = Blueprint('member', __name__) @member.route('/') def home(): return g.subdomain app.py: app = Flask(__name__) app.config['SERVER_NAME'] = 'example.com' from modules import member app.register_blueprint(member, subdomain='<subdomain>')
这段代码和上一节的第像,不同之处是这里的subdomain使用了动态参数
下面是为任何Flask或Blueprint对象增加子域名支持的便捷函数:
def add_subdomain_to_global(endpoint, values): g.subdomain = values.pop('subdomain', None) def add_subdomain_to_url_params(endpoint, values): if not 'subdomain' in values: values['subdomain'] = g.subdomain def add_subdomain_support(app): app.url_value_preprocessor(add_subdomain_to_global) app.url_defaults(add_subdomain_to_url_params)
然后你可以使用before_request回调函数来处理子域名:
add_subdomain_support(blueprint) @blueprint.before_request def add_user_to_global(): g.user = None if g.subdomain: g.user = User.query.filter_by(username=g.subdomain).first_or_404()
注:这里的blueprint请改为实际对象。
特别说明:通配符子域调试不是不太方便,需要做泛域名解析才可以。修改hosts文件来指定域名的方法是不可行的(子域名较少时可以逐个添加,子域名多了就不太现实了)。本机调试时,可以安装DNS服务器(比如LINUX BIND服务等),并做好泛域名解析,然后再进行调试。当然使用公网域名和服务器来调试也未尝不可。
PS:
1.如果某个blueprint默认就需要实用a.domain.com,那么在定义blueprint时候:
a=Blueprint(‘a' ,__name__,subdomain='a')
这样,该bp下面的所有url routing走的都是a.domain.com/xxx
2.在某个具体的url routing定义时,如果需要实用a.domain.com,那么这么写:
@www.route(‘/hello',methods=['GET','POST'],subdomain='a') def xxx(): …..
3.我在具体实践中,默认的routing都是走的www,这是在__init__.py中:
app.url_map.default_subdomain='www'
其实就是设置默认子域名,这样默认不做设置的话,路由走的就是www。
那这个时候如果访问domain.com,即不带www的话,就会报404了,怎么办呢,我是在nginx层面解决这个问题的,在nginx.conf增加一个server:
server { server_name domain.com; rewrite ^(.*) http://www.domain.com$1 permanent; }
更多Python的Flask框架中配置多个子域名相关文章请关注PHP中文网!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

Les expressions régulières sont des outils puissants pour la correspondance des motifs et la manipulation du texte dans la programmation, améliorant l'efficacité du traitement de texte sur diverses applications.

Comment Uvicorn écoute-t-il en permanence les demandes HTTP? Uvicorn est un serveur Web léger basé sur ASGI. L'une de ses fonctions principales est d'écouter les demandes HTTP et de procéder ...

Dans Python, comment créer dynamiquement un objet via une chaîne et appeler ses méthodes? Il s'agit d'une exigence de programmation courante, surtout si elle doit être configurée ou exécutée ...

L'article traite des bibliothèques Python populaires comme Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask et Demandes, détaillant leurs utilisations dans le calcul scientifique, l'analyse des données, la visualisation, l'apprentissage automatique, le développement Web et H et H
