Loading

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函数进行编码

posted @ 2022-12-27 16:37  mi2ac1e  阅读(38)  评论(0编辑  收藏  举报