安全发布Django项目解决方案

1、将DEBUG设置为False

必须这样子做。

2、对python代码进行编译

这里使用Cython工具将.py文件编译成.so文件(在Windos系统中的是.pyd文件)。

(1)成功部署

先将整个项目成功部署到服务器上运行。

(2)安装Cython工具

pip install Cython

(3)编写setup.py文件

可根据自己的需求编写编译逻辑。下面是我自己编写的案例:

from pathlib import Path

from setuptools import setup
from Cython.Build import cythonize
import os

# 执行命令:python setup.py build_ext --inplace

filepaths = []
BASE_DIR = Path(__file__).resolve().parent
print(BASE_DIR)

# 忽略的文件
ignore_files = ["__init__.py", "apps/cms/views/comment.py"]


def is_ignore(fullpath):
    ignore = False
    for name in ignore_files:
        if str(fullpath).endswith(name):
            ignore = True
            break
    return ignore


def encrypt_py(path):
    '''
    加密路径下除了__init__.py的所有.py文件
    :param path:路径
    :return:
    '''
    for root, dirs, files in os.walk(path):
        for file in files:
            fullpath = os.path.join(root, file)
            if os.path.splitext(fullpath)[1] == ".py":
                if not is_ignore(fullpath):
                    filepaths.append(fullpath)
7

if __name__ == '__main__' and not str(BASE_DIR).startswith("D:"):

    encrypt_py(os.path.join(BASE_DIR, "tools"))
    encrypt_py(os.path.join(BASE_DIR, "apps"))
    encrypt_py(os.path.join(BASE_DIR, "apps_extra"))
    error_list = []
    remove_list = []
    remove_error_list = []
    for f in filepaths:
        try:
            setup(ext_modules=cythonize(f))
            try:
                os.remove(f)
                remove_list.append(f)
            except:
                remove_error_list.append(f)
            _f = os.path.splitext(f)[0] + '.c'
            try:
                os.remove(_f)
                remove_list.append(_f)
            except:
                remove_error_list.append(_f)
        except:
            error_list.append(f)

    print("-------------------收集到的文件列表------------------------")
    print(filepaths)
    print("-------------------编译错误的文件列表------------------------")
    print(error_list)
    print("-------------------成功删除的文件列表------------------------")
    print(remove_list)
    print("-------------------删除失败的文件列表------------------------")
    print(remove_error_list)

注意:此案例会对tools、apps、apps_extra目录下的所有py文件进行编译(不编译init,py文件,否在会报错),编译成功后会直接删除py文件和编译中间文件.c。使用此案例进行编译请注意先备份项目。

(4)执行编译命令

进入到项目的python运行环境下执行下面命令。

python setup.py build_ext --inplace

编译成功后可将项目下生成的build文件夹删除。

编译后的项目:


微信截图_20240420172849.png

最后

此方案仅为个人见解,若谁有更好的解决方案可在下方评论区一起交流。

方案会不断的进行优化,最新解决方案可到我的个人博客网站(www.mtools.club)中预览。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容