当前位置: 首页 > news >正文

怎么做网站发货青岛seo关键词排名

怎么做网站发货,青岛seo关键词排名,北京微信网站建设电话,博罗网站建设公司0. 缘起 最近用 flask 写了一个 web 应用,需要部署到服务器上。而服务器主域名已经被使用了,只能给主域名加个子目录进行部署,比如主域名 example.org ,我需要在 example.org/flask 下部署。这时 flask 应用里的内部连接们就出现…

0. 缘起

最近用 flask 写了一个 web 应用,需要部署到服务器上。而服务器主域名已经被使用了,只能给主域名加个子目录进行部署,比如主域名 example.org ,我需要在 example.org/flask 下部署。这时 flask 应用里的内部连接们就出现问题了,因为 flask 应用默认都是部署在根目录,比如项目的 css 定义在 /static/sytle.css 这个地址下,而部署到子目录 /flask 后,浏览器会去 /flask/static/style.css 找这个文件。怎么办?

查看源代码,发现 flask 的内部链接大都使用 url_for 函数实现的,那么解决方案就来了:修改这个函数,让它固定返回一个前缀。

1. 覆写 url_for() 函数测试一下

在 flask 项目目录下,新建一个 common.py 文件,内容如下:

from flask import current_appdef url_for(endpoint, **values):'''override flask.url_for() to add a prefix to the url'''return '/flask' + current_app.url_for(endpoint, **values)

然后到主程序(名叫 myapp.py)里面使用它,代替原来的 flask.url_for,测试代码如下:

from flask import Flask
from .common import url_forapp = Flask(__name__)@app.route("/hello")
def hello_world():return f"地址: {url_for('hello')}"

现在将程序跑起来看看,在命令行下输入:

flask --app myapp run --debug

在浏览器端访问地址 http://127.0.0.1:5000/hello,我们可以看到如下结果:
在这里插入图片描述
好了,第一步大功告成!

现在,我们只需要在各个模块中,将原先的 from flask import url_for 语句,统统替代为 from .common import url_for,就🆗了。

2. 在模板中使用新的 url_for

flask v3 默认使用 jinja2 模板,在其中可以直接使用 url_for 函数,来实现 url 相关的代码解耦。但是前述自定义 url_for 要如何才能在模板中生效呢?

经查询 flask 的官方文档,找到了一个修饰器 context_processor,说是在 jinja2 模板渲染前(即 render_template() 函数运行前),注册好自定义的模板处理函数。这个文档,说实在没看太明白。索性打开源代码看看。

用 vscode 打开项目虚拟环境中的源代码:

code venv\Lib\site-packages\flask

查找 context_processor,发现是在 def update_template_context(self, context: dict[str, t.Any]) -> None: 这个函数定义中处理 context_processor。但是这个函数体咱也看不懂呀,只好问问 kimi 了,结果人家果然将函数解析得明明白白。
![向 kimi 问函数语法](https://i-blog.csdnimg.cn/direct/22c3612787d640cfb80f079681a252d7.png#pic_center
向 kimi 问函数语法

kimi 的回答
最后我让 kimi 给我一个示例,这下就真的懂了。因此打开我的 myapp.py,加入如下代码:

@app.context_processor  # 这里是将自定义的 url_for 函数传递给 jinja2 模板
def inject_custom_url_for(): # 这个函数名不重要,任意均可return dict(url_for=url_for)

并修改 def hello_world(),加入模板测试一下:

@app.route("/hello")
def hello_world():from flask import render_template_stringreturn f"""本页地址: {url_for('hello')}  <br> 模板: {render_template_string("{{ url_for('static', filename='style.css') }}")}"""

运行起来之后,就可以看到模板内的地址果然也加上了前缀了。
在这里插入图片描述

3. 将前缀加入到配置中

现在,我们需要将前面硬编码的前缀,改为可以在部署之后随意修改的配置文件,以适应实际的部署场景。配置文件采用 flask 中最常见的 config.py。修改 common.py 如下:

from flask import current_appdef url_for(endpoint, **values):'''override flask.url_for() to add a prefix to the url'''prefix = current_app.config.get('URL_PREFIX', '')return prefix + current_app.url_for(endpoint, **values)

现在,我们随时可以修改部署在服务器端的 config.py 文件,加入如下配置,即可灵活修改网页服务器的子目录前缀了:

URL_PREFIX=/flask

至此,大功告成!

参考

  • Masked5,02_详解Flask中的URL ——url_for() 与 自定义动态路由过滤器: https://blog.csdn.net/Drifter_Galaxy/article/details/116106315
  • flask 之 url_for() 函数解析: https://blog.csdn.net/lovedingd/article/details/106671247
  • flask 3.0.x 官方文档: https://flask.palletsprojects.com/en/3.0.x/api/
http://www.shuangfujiaoyu.com/news/33497.html

相关文章:

  • 百度云怎么做网站空间网页设计
  • 河间网站建设企业网站设计模板
  • 公司网站建设的目的苏州seo关键词优化排名
  • 做公众号和网站主页的区别国外网站怎么推广
  • 可以自己做网站经营吗友情链接有哪些
  • 桐庐网站建设知识营销成功案例介绍
  • 收费网站素材做手机关键词快速排名软件
  • 自己有域名怎么做免费网站环球军事网
  • 怎么检查外包做的网站搜索引擎搜索
  • 网站负责人姓名如何宣传推广
  • 什么视频网站可以做链接成全高清免费观看mv
  • 网站地图的制作网络推广技巧
  • 深圳装饰公司网站长沙seo推广公司
  • 专业做网站的顺德公司平面设计正规培训机构
  • 网站开发对比特点如何做关键词优化
  • 日本设计网站有哪些优化seo教程
  • 房地产网站建设解决方案关键词推广方法
  • 国外做logo的网站搜索引擎推广与优化
  • dedecms如何做音乐网站网络营销知识点
  • 单页网站在线生成网络营销的主要内容包括
  • 网站定制开发优点百度搜索网站
  • 建网站 西安优化是什么意思?
  • 网站建设好公司方象科技的服务范围
  • 网页设计入门与应用seo营销怎么做
  • 北京市住房和城乡建设委员会门户网站做引流的公司是正规的吗
  • 旅游在线网站开发网站的收录情况怎么查
  • 外贸独立站saas建站怎样免费建立自己的网站
  • 微信公众号h5商城网站开发重庆seo教程搜索引擎优化
  • iis 发布asp网站百度个人中心登录
  • 关于公司网站建设的申请2022今日最新军事新闻