作者: kukey-admin

  • g.user_logged_in = session.get(‘logged_in’, False)

    在 Flask 应用中,before_request 是一个特殊的装饰器,它允许你在处理请求之前执行某些操作。这意味着无论用户请求应用中的哪个端点(URL),before_request 装饰的函数都会首先被调用。
    
    下面是 before_request 装饰器函数的一个例子:
    
    python
    @app.before_request
    def before_request():
        g.user_logged_in = session.get('logged_in', False)
    这行代码的意思是:
    
    @app.before_request:这是一个装饰器,它会告诉 Flask 在处理每个请求之前先运行 before_request 函数。
    def before_request():这是被装饰的函数,它将在每个请求处理之前被调用。
    g:是 Flask 的全局变量,它是一个特殊的对象,用于在请求之间存储数据。g 对象在请求的生命周期内是唯一的,这意味着在一个请求处理过程中,你可以使用 g 来存储数据,然后在同一个请求的其他部分访问这些数据。
    session.get('logged_in', False):这行代码尝试从 session 中获取键为 logged_in 的值。如果 logged_in 键不存在,它将返回默认值 False。这通常用来检查用户是否已经登录。
    g.user_logged_in:将 session.get('logged_in', False) 的结果赋值给 g 对象的 user_logged_in 属性。这样,你就可以在请求处理的任何地方,包括模板中,通过 g.user_logged_in 来访问用户的登录状态。
    使用 before_request 钩子,你可以在每个请求开始时设置 g.user_logged_in,然后在模板中使用这个变量来判断是否显示登录按钮或登出按钮,或者执行其他基于用户登录状态的操作。

     

  • 怎么让一个程序自带Python环境,不需要安装python,以文件的形式调用python解释器,不用打包的那种,直接给一个压缩包,解压就能用的

    内容来自kimi ai

    如果你想要创建一个压缩包,用户解压后即可直接使用 Python 环境,而不依赖于系统上已安装的 Python,可以考虑以下方法:

    1. 创建自定义 Python 发行版:
      • 你可以下载 Python 源代码并自行编译,或者使用现成的 Python 发行版,如 Anaconda 或 WinPython。
      • 编译时,确保包含所有必要的库和模块。
    2. 使用 Portable Python:
      • Portable Python 是一个预编译的 Python 发行版,专为便携式使用设计。它可以在没有安装 Python 的系统上运行。
      • 你可以从 Portable Python 的官方网站下载一个与你的需求相匹配的版本,然后将其压缩为 zip 或 tar.gz 格式。
    3. 手动打包 Python 环境:
      • 手动下载 Python 解释器的可执行文件(例如 python.exepythonw.exe 等)和相关 DLL 文件。
      • 将 Python 解释器、标准库、以及你程序所需的第三方库一起复制到一个文件夹中。
      • 将这个文件夹压缩为 zip 或 tar.gz 格式。
    4. 使用虚拟环境:
      • 在一个独立的环境中安装 Python 和所有必要的库,然后使用工具如 venv  virtualenv 创建虚拟环境。
      • 将虚拟环境文件夹压缩,用户解压后即可使用。
    5. 使用 Docker 容器:
      • 创建一个 Dockerfile,定义 Python 环境和所有必要的依赖。
      • 构建 Docker 镜像,并将镜像保存为 tar 文件。
      • 用户可以下载这个 tar 文件,然后使用 Docker 载入镜像并运行。
    6. 使用 PyOxidizer:
      • PyOxidizer 允许你打包 Python 应用程序,包括 Python 解释器和所有依赖,到一个单一的可执行文件或库文件中。
      • 你可以配置 PyOxidizer 生成包含 Python 解释器的压缩包。
    7. 使用自定义脚本:
      • 编写一个脚本,当运行时,它会解压 Python 解释器和所有必要的文件到一个临时目录,并从那里执行你的 Python 程序。

    请注意,打包 Python 环境需要确保包含解释器、所有必要的动态链接库(DLLs 或 SO 文件),以及可能的依赖项。此外,确保遵守 Python 及第三方库的版权和许可协议。如果你需要具体的帮助或示例,请提供更多的信息。

  • Flask-WTF 1.2.1给渲染界面的标签添加id属性和class属性

    加class注意使用的是class_,有一个下划线

    class 分类表单(FlaskForm):
        name = StringField('分类名',id='分类名',render_kw={'class': '分类名 form-control'},validators=[DataRequired(),Length(1,100)])
        desc = TextAreaField ('分类描述',id='分类描述',render_kw={'class': '分类描述 form-control'},validators=[DataRequired(),Length(1,1000)])
        submit = SubmitField('创建分类',id='创建分类',render_kw={'class': '创建分类 btn btn-primary'})

     

     

  • clash自定义规则收集

    prepend:
      - 'DOMAIN-SUFFIX,mail.qq.com,DIRECT'
      - 'DOMAIN-SUFFIX,v.flomoapp.com,DIRECT'
      - 'DOMAIN-SUFFIX,kimi.moonshot.cn,DIRECT'
      - 'DOMAIN-SUFFIX,kuyour.top,DIRECT'
      - 'DOMAIN-SUFFIX,pypi.mirrors.ustc.edu.cn,DIRECT'
      - 'DOMAIN-SUFFIX,download.pytorch.org,DIRECT'
      - 'DOMAIN-SUFFIX,pypi.tuna.tsinghua.edu.cn,DIRECT'
      - 'DOMAIN-SUFFIX,mirrors.aliyun.com,DIRECT'
      - 'DOMAIN-SUFFIX,pypi.douban.com,DIRECT'
      - 'DOMAIN-SUFFIX,anythingllm.com,DIRECT'
      - 'DOMAIN-SUFFIX,blog.csdn.net,DIRECT'
      - 'DOMAIN-SUFFIX,registry.npm.taobao.org,DIRECT'

     

  • clash自定义规则,让指定网站不翻墙

    www.bilibili.com 直连

    yaml
    rules:
       - DOMAIN-SUFFIX,bilibili.com,DIRECT
       - DOMAIN,www.bilibili.com,DIRECT

    参数说明:

    • DOMAIN-SUFFIX,bilibili.com,DIRECT:匹配所有以 bilibili.com 结尾的域名,包括它的所有子域名,如 www.bilibili.comapi.bilibili.com 等,并让这些域名的流量直接连接,不走代理。
    • DOMAIN,www.bilibili.com,DIRECT:特别指定 www.bilibili.com 这个具体域名直连,即使前面有更宽泛的 DOMAIN-SUFFIX 规则。

    通常情况下,如果你已经使用 DOMAIN-SUFFIX,bilibili.com,DIRECT 规则,那么 www.bilibili.com 就已经被包含在内,不需要额外指定。但如果你想要确保 www.bilibili.com 特别被规则匹配,可以添加上述的 DOMAIN 规则。

    请注意,Clash的规则匹配是按照配置文件中的顺序进行的,因此,如果你有其他规则可能会匹配到 www.bilibili.com 并将其代理,你需要确保直连规则在这些代理规则之前。

    另外,如果你想要让整个 bilibili.com 域的所有子域都直连,只使用 DOMAIN-SUFFIX,bilibili.com,DIRECT 规则就足够了。如果你的Clash配置文件中已经有其他规则,确保将直连规则放在代理规则之前,以确保它们优先匹配。

    最后,修改配置文件后,需要重新加载或重启Clash以使配置生效。具体操作取决于你使用的Clash版本和平台。

    如图示例:

    或者点击[高级],直接编辑文件,适用于你有好多网站不想走代理,需要直连的情况

    Clash 是一个跨平台的代理软件,它允许用户自定义复杂的网络代理规则。如果你想要指定某些网站不走代理,直接连接,你可以在 Clash 的配置文件中设置相关的规则。

    Clash 的配置文件是一个 YAML 格式的文件,通常命名为 config.yaml。以下是一个基本的示例,展示了如何设置规则让指定网站直接连接(不经过代理):

    yaml
    rules:
    - MATCH,DIRECT
    - DOMAIN-SUFFIX,google.com,ProxyName # 所有google.com的子域名通过ProxyName代理
    - DOMAIN-SUFFIX,facebook.com,ProxyName # 所有facebook.com的子域名通过ProxyName代理
    - DOMAIN,example.com,DIRECT # example.com不走代理,直接连接
    - DOMAIN-SUFFIX,example.com,DIRECT # example.com的所有子域名不走代理,直接连接
    - GEOIP,CN,DIRECT # 所有在中国境内的IP地址不走代理,直接连接
    - FINAL,ProxyName # 以上规则都不匹配时,通过ProxyName代理

    在这个配置中:

    • MATCH,DIRECT 表示如果没有任何规则匹配,则流量直接连接。
    • DOMAIN-SUFFIX,google.com,ProxyName 表示所有 google.com 的子域名将通过名为 ProxyName 的代理连接。
    • DOMAIN,example.com,DIRECT 表示 example.com 这个具体域名不走代理,直接连接。
    • DOMAIN-SUFFIX,example.com,DIRECT 表示所有 example.com 的子域名不走代理,直接连接。
    • GEOIP,CN,DIRECT 表示所有地理定位为中国的IP地址不走代理,直接连接。
    • FINAL,ProxyName 表示如果流量没有匹配到前面的任何规则,则通过名为 ProxyName 的代理连接。

    你需要将这个配置文件放置在 Clash 可以读取到的位置,并在 Clash 中加载这个配置文件。具体的配置文件路径和加载方式可能因 Clash 的版本和操作系统而异。

    请注意,上述示例中的 ProxyName 是一个占位符,你需要替换为你实际的代理策略名称。如果你不熟悉 YAML 格式或 Clash 的配置方式,建议先阅读 Clash 的官方文档或相关指南。

     

  • findstr

    findstr 是一个在 Windows 命令提示符(cmd)中使用的命令行工具,用于在文件中搜索字符串。它支持正则表达式,这使得它在文本搜索方面非常灵活和强大。以下是一些 findstr 的常用用法:

    1. 基本搜索: 搜索包含特定字符串的行:
      cmd
      findstr "Hello" filename.txt
    2. 使用正则表达式: 使用正则表达式进行模式搜索:
      cmd
      findstr "regex_pattern" filename.txt
    3. 忽略大小写: 使用 /i 选项来执行不区分大小写的搜索:
      cmd
      findstr /i "HELLO" filename.txt
    4. 多字符串搜索: 同时搜索多个字符串:
      cmd
      findstr "string1" "string2" filename.txt
    5. 只打印包含匹配的行: 使用 /c: 选项后跟字符串,仅打印包含该字符串的行:
      cmd
      findstr /c:"Hello" filename.txt
    6. 排除特定字符串: 使用 /x 选项排除包含特定字符串的行:
      cmd
      findstr /c:"Hello" /x:"Goodbye" filename.txt
    7. 搜索多个文件: 搜索当前目录下所有 .txt 文件中的字符串:
      cmd
      findstr "Hello" *.txt
    8. 递归搜索子目录: 使用 /s 选项递归搜索子目录中的文件:
      cmd
      findstr /s "Hello" *.txt
    9. 打印行号: 使用 /n 选项打印包含匹配项的行的行号:
      cmd
      findstr /n "Hello" filename.txt
    10. 打印列号: 使用 /o 选项打印匹配项的字符偏移量(列号):
      cmd
      findstr /o "Hello" filename.txt
    11. 打印文件名: 使用 /p 选项只打印包含至少一个匹配项的文件名:
      cmd
      findstr /p "Hello" *.txt

    findstr 是一个非常有用的工具,特别是当您需要在命令行环境中快速搜索文本文件时。请注意,正则表达式的语法可能与其他工具或编程语言中的正则表达式略有不同,因此在使用时需要参考 findstr 的具体文档。

  • flask使用send_from_directory函数指定目录播放视频

    项目结构

    templates\index.html

    main.py

    网页

    templates\index.html

    <!DOCTYPE html>
    <html>
    <head>
        <title>视频播放</title>
    </head>
    <body>
        <h1>视频播放</h1>
        <video width="320" height="240" controls>
            <source src="/video/处处吻.mp4" type="video/mp4">
            你的浏览器不支持 HTML5 video 标签。
        </video>
    </body>
    </html>

    python文件

    main.py

    from flask import Flask, render_template, send_from_directory
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return render_template('index.html')  # 你的视频播放页面
    
    @app.route('/video/<filename>')
    def video(filename):
        VIDEO_PATH = 'E:/code/flask/video'
        # filename='1.mp4'
        return send_from_directory(directory=VIDEO_PATH, path=filename)
    
    if __name__ == '__main__':
        app.run(debug=True)

     

     

  • 如何最小化当前正在运行的python程序到任务栏?

    使用pyautogui库,模拟按键win+d
    
    import pyautogui
    pyautogui.keyDown('win')
    pyautogui.press('d')
    pyautogui.keyUp('win')

     

     

  • 查看当前安装的pyautogui的版本

    又看到一种查看指定python库版本的方法了

    pip show ipython

    代码中导入pyautogui

    打印pyautogui.__version__

    import pyautogui 
    print(pyautogui.__version__)

     

    想查看其他python库的版本也是一样的.

    python库安装太多了,我就想知道这一个库的版本就用这个方法了

  • raise ImageNotFoundException # Raise PyAutoGUI’s ImageNotFoundException. pyautogui.ImageNotFoundException

    0.9.54版本的pyautogui查找一张不存在的图片时,会出现一个异常

    File "C:\Users\rkey\AppData\Local\Programs\Python\Python38\lib\site-packages\pyautogui\__init__.py", line 174, in wrapper
        raise ImageNotFoundException  # Raise PyAutoGUI's ImageNotFoundException.
    pyautogui.ImageNotFoundException

    导致无法判断结果是None.

     

    比如这样会出问题:

    img_path= r".\\image_for_identify\\free_finished.jpg"
    while location is None and time.time() - start_time < timeout:
        location = pyautogui.locateOnScreen(imageFile,grayscale=True, confidence=0.8)
        if location is None:
            time.sleep(0.1)

    于是我异常捕获了一下,发现提示”该异常未找到 ”

     

    我反复在想这个异常,突然发现这个pyautogui.ImageNotFoundException说不定就是一个处理异常的包呢,

    再来一下异常处理,专门处理这个异常,发现能找到这个异常了

    导入一下试试

    from pyautogui import ImageNotFoundException
    try:
        location = pyautogui.locateOnScreen(图片路径, grayscale=True, confidence=0.8)
    if location is None:
        # 如果location是None,则抛出ImageNotFoundException
        raise ImageNotFoundException('无法在屏幕上找到指定的图像。')
    else:
        # 如果找到了图像,执行一些操作
        print(f"找到了图像,位置是:{location}")
    except ImageNotFoundException as e:
        # 捕获ImageNotFoundException异常
        print(e)

    ok,这个异常能捕获了