加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用django或任何python模块链接生成器

发布时间:2020-12-20 11:17:49 所属栏目:Python 来源:网络整理
导读:我想为我的用户生成临时下载链接. 如果我使用 django使用url模式生成链接,那可以吗? 这可能是正确的方法.因为可能发生我不理解某些过程如何工作.它会溢出我的记忆或其他东西.将会欣赏某种示例或工具.有些nginx,apache模块可能吗? 所以,我想要实现的是制作
我想为我的用户生成临时下载链接.
如果我使用 django使用url模式生成链接,那可以吗?
这可能是正确的方法.因为可能发生我不理解某些过程如何工作.它会溢出我的记忆或其他东西.将会欣赏某种示例或工具.有些nginx,apache模块可能吗?

所以,我想要实现的是制作取决于用户和时间的网址模式.在文档中查看它结束返回.

解决方法

是的,允许django生成网址是可以的.这与urls.py处理网址是排他的.通常你不希望django处理文件的服务,请参阅关于此的静态文件docs [1],因此请从头脑中获取使用url模式的概念.

您可能想要做的是使用散列生成随机密钥,如md5 / sha1.存储文件和密钥,它在数据库中添加的日期时间,在您的网络服务器上可以创建下载目录,如apache或nginx …建议nginx),因为它是临时的,你需要添加一个cron检查自生成url以来的时间是否已过期的作业,清除文件并删除db条目.这应该是manage.py的django命令

请注意这是为此编写的示例代码,未经测试!它可能无法按照您计划实现此目标的方式运行,但它可行.如果你想让dl受到pw保护,那么请查看httpbasic auth.您可以在创建链接时或在注册时使用htpasswd和子进程模块在httpd.auth文件中动态生成和删除条目.

import hashlib,random,datetime,os,shutil
# model to hold link info. has these fields: key (charfield),filepath (filepathfield)
# datetime (datetimefield),url (charfield),orgpath (filepathfield of the orignal path
# or a foreignkey to the files model.
from models import MyDlLink 
# settings.py for the app
from myapp import settings as myapp_settings

# full path and name of file to dl.
def genUrl(filepath):
  # create a onetime salt for randomness
  salt = ''.join(['{0}'.format(random.randrange(10) for i in range(10)])
  key = hashlib('{0}{1}'.format(salt,filepath).hexdigest()
  newpath = os.path.join(myapp_settings.DL_ROOT,key)
  shutil.copy2(fname,newpath)
  newlink = MyDlink()
  newlink.key = key
  newlink.date = datetime.datetime.now()
  newlink.orgpath = filepath
  newlink.newpath = newpath
  newlink.url = "{0}/{1}/{2}".format(myapp_settings.DL_URL,key,os.path.basename(fname))

  newlink.save()
  return newlink


# in commands
def check_url_expired():
  maxage = datetime.timedelta(days=7)
  now = datetime.datetime.now()
  for link in MyDlink.objects.all():
     if(now - link.date) > maxage:
       os.path.remove(link.newpath)
           link.delete()

[1] http://docs.djangoproject.com/en/1.2/howto/static-files/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读