- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python的Flask框架中配置多个子域名的方法讲解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Flask子域名 一般用于数量比较少的子域名,一个模块对应一个子域名。先看下面一个例子:
modules.py
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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使用了动态参数<subdomain>(路由中的URL变量也是这种方式)。我们可以用这个参数在请求回调函数之前利用的组合的url处理器来获取相关的用户。这样我们就可以通过*.example.com的形式来访问member模块了.
下面是为任何Flask或Blueprint对象增加子域名支持的便捷函数:
1
2
3
4
5
6
7
8
9
10
|
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回调函数来处理子域名:
1
2
3
4
5
6
7
|
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时候:
1
|
a
=
Blueprint(‘a
' ,__name__,subdomain='
a')
|
这样,该bp下面的所有url routing走的都是a.domain.com/xxx 。
2.在某个具体的url routing定义时,如果需要实用a.domain.com,那么这么写:
1
2
3
|
@www
.route(‘
/
hello
',methods=['
GET
','
POST
'],subdomain='
a')
def
xxx():
…..
|
3.我在具体实践中,默认的routing都是走的www,这是在__init__.py中:
1
|
app.url_map.default_subdomain
=
'www'
|
其实就是设置默认子域名,这样默认不做设置的话,路由走的就是www。 那这个时候如果访问domain.com,即不带www的话,就会报404了,怎么办呢,我是在nginx层面解决这个问题的,在nginx.conf增加一个server
1
2
3
4
|
server {
server_name domain.com;
rewrite ^(.*) http://www.domain.com$1 permanent;
}
|
最后此篇关于Python的Flask框架中配置多个子域名的方法讲解的文章就讲到这里了,如果你想了解更多关于Python的Flask框架中配置多个子域名的方法讲解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我只是不喜欢 Logback 的 XML 或 Groovy 配置,而更喜欢用 Java 进行配置(这也是因为我将在初始化后的不同时间在运行时更改配置)。 似乎对 Logback 进行 Java 配置的
我的 sphinx 配置是: ================================ config/sphinx.yml development: bin_path: "/usr/loc
我们计划在生产服务器中部署我们的系统。我有兴趣了解更多有关优化网站性能的信息。 Sitecore 有哪些优化建议? (缓存,网络配置中的其他设置) 我们可以在 IIS 中做哪些优化? 找不到关于这些主
我有一个 Django 应用程序,可以处理网站的两个(或更多)部分,例如网站的“admin”和“api”部分。我还为网站的其余部分提供了普通的 html 页面,其中不需要 Django。 例如,我希望
我刚刚开始研究Docker。我有一个 Node 应用程序,可以调整大小和图像,然后在完成后向 aws 发送 SQS 消息。我已成功创建应用程序的 docker 镜像,并从本地计算机复制它,但遇到了无法
如何配置 checkstyle(在 Ant nt Maven 中)任务?我尝试了一点,但没有正确收到报告。这是我的 Ant 脚本。
我正在使用 Quartz 和 Spring 框架重写一个遗留项目。原始配置是 XML 格式,现在我将其转换为 Java Config。 xml 配置使用 jobDetail 设置触发器 bean 的作
tl;rd: 使用主键对数据库进行分区 索引大小问题。 数据库大小每天增长约 1-3 GB 突袭设置。 您有使用 Hypertable 的经验吗? 长版: 我刚刚建立/购买了一个家庭服务器: 至强 E
在安装 gcp 应用程序后,我们尝试使用 GCP 的图形 api 配置 Azure Active Directory saml 配置。我们正在遵循相同的 AWS graph api saml 设置 U
我刚刚了解了 spring security 并想使用 java hibernate 配置连接到数据库,但我发现的示例或教程很少。我通过使用 xml 配置找到了更多。我在这里使用 Spring 4.0
我们最近切换到 Java 8 以使用 java.time API(LocalDate、LocalDateTime,...)。因此,我们将 Hibernate 依赖项更新到版本 4.3.10。我们编写了
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《quarkus实战》系列的第六篇,咱
我是 NGINX 的新手,我正在尝试对我们的 ERP 网络服务器进行负载平衡。我有 3 个网络服务器在由 websphere 提供支持的端口 80 上运行,这对我来说是一个黑盒子: * web01.e
我们想使用 gerrit 进行代码审查,但我们在 webview 中缺少一些设置。 是否可以禁止提交者审查/验证他们自己的 提交? 是否有可能两个审稿人给 +1 一个累积它 到+2,以便可以提交? 谢
配置根据运行模式应用于 AEM 实例。在多个运行模式和多个配置的情况下,AEM 如何确定要选择的配置文件?假设以下配置在 AEM 项目中可用, /apps /myproject - con
我正在使用 Neo4j 服务器。我遇到了负载相对较低的问题。但是,响应时间相当长。我认为为请求提供服务的线程数太少了。有没有办法调整为 HTTP 请求提供服务的线程池的大小。那可能吗? 最佳答案 线程
我在/etc/default/celeryd 中有以下配置 CELERYD_NODES = "worker1 worker2 worker3" CELERYD_CHDIR = "path to pro
Plone 在其页面中显示来 self 的母语(巴西葡萄牙语)的特殊字符。但是,当我使用我创建的 spt 页面时,它会显示转义序列,例如: Educa\xc3\xa7\xc3\xa3o 代替 Educ
我正在尝试开始使用 Emacs/Clojure。安装 emacs 扩展的正确方法是什么。我正在尝试安装以下插件: https://bitbucket.org/kotarak/vimclojure 我已
我有一个简单的 C 项目结构: proj/ src/ docs/ build/ tests/ lib/ 尝试编写合适的 CMake 文件。 到目前为止我的尝试:http://pas
我是一名优秀的程序员,十分优秀!