我试图计算8个字符的短唯一随机文件名,比方说,数千个文件没有可能的名称冲突.这种方法足够安全吗?
base64.urlsafe_b64encode(hashlib.md5(os.urandom(128)).digest())[:8]
Run Code Online (Sandbox Code Playgroud)
为了更清楚,我试图实现最简单的模糊文件名上传到存储.
我发现,8个字符的字符串,足够随机,是非常有效和简单的方法来存储成千上万的文件,没有可能的冲突,当正确实施时.我不需要保证唯一性,只需要足够高的名称冲突不可能性(仅涉及数千个名称).
文件存储在并发环境中,因此增加共享计数器是可以实现的,但是很复杂.在数据库中存储计数器效率低下.
我也面临这样的事实:random()在某些情况下会在不同的进程中返回相同的伪随机序列.
PyCharm在我的Django项目中找不到模板,模板标签和静态文件,即使项目本身设置正确且有效.
我正在使用Django 1.6.2这个布局:
proj
.devtmp
manage.py
proj
settings.py
app1
templatetags
app2
templates
static
Run Code Online (Sandbox Code Playgroud)
并使用以下设置:
from os.path import join, dirname, pardir, abspath
PROJECT_ROOT = abspath(join(dirname(__file__), pardir))
DEV_TMP_DIR = join(PROJECT_ROOT, pardir, '.devtmp')
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
TEMPLATE_DIRS = (
join(PROJECT_ROOT, 'templates'),
)
MEDIA_ROOT = join(DEV_TMP_DIR, 'media')
MEDIA_URL = '/media/'
STATIC_ROOT = join(DEV_TMP_DIR, 'static')
STATIC_URL = '/static/'
INSTALLED_APPS = (
...
'django.contrib.staticfiles',
...
'proj'
'proj.app1'
'app2'
)
Run Code Online (Sandbox Code Playgroud)
更新:
在IDE首选项中,我已配置项目根目录的路径,settings.py和manage.py.另外,我已经配置了项目解释器(我现在正在从IDE运行runserver而没有任何问题).