Django 代码保护

常用的代码保护不外乎下面几种方法:

发行 .pyc 文件
代码混淆
使用 py2exe
使用 Cython

django发布的需要以服务运行,通过其他的几种方法来实现保护,都不太现实。所以发布可以通过cython的方式实现。

1. 安装cython

pip3 install cython

2.在项目目录创建setup.py 编辑内容如下,其中“app/file1.py”是你所要打包的py文件名,这儿需要把app下所有的py文件都添加进来(当然也可以添加部分)

from distutils.core import setup

from Cython.Build import cythonize

fileSet = set()

fileSet.add("UserBase/models.py")
fileSet.add("UserBase/views.py")

setup(

    ext_modules=cythonize(fileSet)

)

Continue Reading

django使用多个数据库

通过官方文档https://docs.djangoproject.com/zh-hans/3.1/topics/db/multi-db/和csdnhttps://blog.csdn.net/songfreeman/article/details/70229839的这两篇文章可以进行多数据库的设置。但是设置后可能会出现问题,由于我连接的数据库是通过inspactdb的方法得到的model。于是在migrate的时候出现了问题,会提示 1146, “Table xxx doesn’t exist” 。后来发现问题可能出在路由表上,按照DATABASE_APPS_MAPPING映射之后,django默认的表如果要写入可能会找不到数据库。而源代码里的映射关系并不包含新加入的app,例如grappelli等。

DATABASE_APPS_MAPPING = {
# example:
# 'app_name':'database_name',
# 'admin': 'default',
# 'users': 'default', #django
'basic_estate': 'basic_estate',
'footstone': 'footstone',
'mall': 'hsmall',
'iot_biz': 'iot_biz',
'mall': 'mall',
'hsuser': 'hsuser',
}
Continue Reading

django raw_id_fields 显示名称而不是id(raw_id_fields: How to show a name instead of id)

为了防止页面加载的时候加载所有的Foreignkey到内存,django提供了一个raw_id_fields,该tupple内的数据将只展示id。虽然内存不加载了,但是基本没法看。不知道是个什么东西。

这尼玛tags和Porn model完全看不出是个什么东西。如果要展示相关的名称可以使用django-dynamic-raw-id

A Django admin raw_id_fields widget replacement that handles display of an object’s string value on change and can be overridden via a template

使用方法: https://pypi.org/project/django-dynamic-raw-id/

具体效果:

嗯,非常直观~ 测试环境:python 3.7.2 + django 3.7.2

Continue Reading