Flask自写博客疑难解决
最近一个多月一直在coding,写我的博客。目前已经写的八九不离十了,大大小小的BUG一直在出现,也一直在修(可以这么说,一个月写博客,一个月修BUG),记录一下一些BUG的产生及解决方案.如果你也有类似的用Flask写一个自己的博客,也可以试试
字典写入Yaml配置文件顺序无法确定
该功能是想借用yaml配置文件以实现保存布局的想法,这就需要写入的YAML文件跟字典的顺序必须保持一致,然而网上的大多数代码并不能保证这件事。经过漫长的查询,我最终发现解决方案,在yaml.dump
中添加:sort_keys=False
即可。这里给出我的代码
def save_dict_to_yaml(dict_value: dict, save_path: str):
"""dict保存为yaml"""
with open(save_path, 'w') as file:
file.write(yaml.dump(dict_value, allow_unicode=True,default_flow_style=False,sort_keys=False)) # 添加sort_keys=False 可以保存字典的顺序,而不是按照它的内定顺序写入。
def read_yaml_to_dict(yaml_path: str, ):
with open(yaml_path) as file:
dict_value = yaml.load(file.read(), Loader=yaml.FullLoader)
return dict_value
启动全局身份校验
原来的身份校验太过于恶心
,获取GET传递过来的Token值,并对于预设值的Token值,一致则放行。
但是随着control的功能越来越多,这样的写法越来越冗余,于是寻求一种跟Java差不多的身份校验机制:对于某类路由,都需要做身份验证
最后发现Flask提供了这样的功能:只要是/admin
下的路由都需要进行校验
这样的话,我们只需要将需要身份验证的路由全部设置为/admin/xxxx
即可
最后给出我的代码(敏感路由、身份校验的模式已经隐藏,仅以最简单的作为代码实例)
@app.before_request
def roleCheck():
if request.path.startswith("/admin"):
if session.get("status")=="1":
return None
else:
return redirect(url_for("login"))
else:
return None
Jinja2模板调用Python函数以解决GET传参带有特殊符号的情况
这个BUG是在最近找到的,我发现GET传递这个名称时:MACBOOK ARM架构配置xdebug+phpstorm
会把+
号也变成空格
导致找不到对应的文章。
解决方法其实很简单,就是将这个名称urlencode一下就行了。但是怎么encode?
实际上可以借助Jinja2来调用函数,我们只需要先设置一下
app.jinja_env.globals.update(urlencode=urlencode)
就可以在模板中调用了,示例:
{{ item|urlencode }}
对item的值调用urlencode函数进行编码