GVKun编程网logo

Django删除未使用的媒体文件(django 删除文件)

14

在这篇文章中,我们将带领您了解Django删除未使用的媒体文件的全貌,包括django删除文件的相关情况。同时,我们还将为您介绍有关Django(七)token&静态文件&媒体文件、django中的媒

在这篇文章中,我们将带领您了解Django删除未使用的媒体文件的全貌,包括django 删除文件的相关情况。同时,我们还将为您介绍有关Django (七) token&静态文件&媒体文件、django 中的媒体部分不会出现、Django 静态文件和媒体文件配置、Django中的静态文件和媒体文件有什么区别?的知识,以帮助您更好地理解这个主题。

本文目录一览:

Django删除未使用的媒体文件(django 删除文件)

Django删除未使用的媒体文件(django 删除文件)

我有一个django项目,管理员可以在其中上传媒体。随着物品的销售,它们将从站点中删除,从而删除了它们在MySQL数据库中的条目。但是,与该项目关联的图像保留在文件系统上。这不一定是不良行为-
我不介意保留文件,以防万一删除是偶然的。我预见的问题是从现在起的两年后,由于媒体文件夹中的旧产品图片过大,存储空间受到限制。

有谁知道一种系统/编程的方式来对所有图像进行排序,并将它们与相关的MySQL字段进行比较,从而从文件系统中删除任何不匹配的图像?在理想环境中,我正在想象django-
admin中的一个按钮,例如“清理未使用的媒体”,该按钮执行能够实现此功能的python脚本。我将分享我最终的解决方案,但是我现在正在寻找的是任何有想法,知道资源或自己在某个时候做到了的人。

答案1

小编典典

尝试django-cleanup,当您删除模型时,它将自动在FileField上调用delete方法。

pip install django-cleanup

settings.py

INSTALLED_APPS = (     ...    ''django_cleanup'', # should go after your apps)

Django (七) token&静态文件&媒体文件

Django (七) token&静态文件&媒体文件

 token&静态文件&媒体文件

1. token

1. 会话技术
2. 服务端会话技术
3. 它实际上就是手动实现的session
4. 实现token
    4.1 models.pyUser类中添加token字段
       class User(models.Model):
           name = models.CharField(max_length=30, unique=True)
           password = models.CharField(max_length=32)
           age = models.IntegerField(default=1)
           token = models.CharField(max_length=32, null=True, blank=True, default='''')
   4.2 md5加密
        # md5加密
        def my_md5(password):
           md5 = hashlib.md5()
           md5.update(password.encode(''utf-8''))
           return md5.hexdigest()
     
   4.3 注册用户时,随机生成唯一的token
       token/usertoken,  用户唯一标识
       可以使用 时间+随机数+公司域名+ip信息 时间+随机数等方式生成token
       # 生成加密的token
       def generate_token():
           token = str(time.time()) + str(random.random())
           return my_md5(token)
 
   4.4 登录时使用cookie存储token
        # token
        d = datetime.datetime.now() + datetime.timedelta(days=7) # 保存7天
        response.set_cookie(''token'', res.first().token, expires=d)
 
   4.5 根据token获取用户信息
       token = request.COOKIES.get(''token'', '''')
       users = User.objects.filter(token=token)
 
   4.6 退出登录
       response = HttpResponseRedirect(reverse(''app:index''))
       # 删除cookie: token
       response.delete_cookie(''token'')
       return response
 

 

2. 用户登录注册

1. 用户注册
    将用户名,用户密码,用户信息,存储到数据库中
2. 用户登陆
    使用用户名,用户密码进行数据库校验
3. 用户信息
    根据用户的唯一标识,去获取用户
4. 数据安全
    服务器的数据对任何人来说都应该是不可见的(不透明)
    可以使用常见的摘要算法对数据进行摘要(md5,sha1)
    如果使用了数据安全,那么就需要在所有数据验证的地方都加上 数据安全
 

 

3. 静态文件和媒体文件

媒体文件:用户上传的文件,叫做media
静态文件:存放在服务器的css,js,image等 叫做static
 

3.1 在django中使用静态文件

    1)首先确保django.contrib.staticfilesINSTALLED_APPS
    2)在settings中定义 STATIC_URL
        STATIC_URL = ''/static/''
    3)在你appstatic目录中存放静态文件,比如: 
        my_app/static/my_app/example.jpg.
    4)如果有别的静态资源文件,不在app下的static目录下,可以通过
STATICFILES_DIRS来指定额外的静态文件搜索目录。
       STATICFILES_DIRS = [
           os.path.join(BASE_DIR, "static"),
           ...
       ]
   5)在模板中使用load标签去加载静态文件
        {% load static %}
        <img src="{% static "my_app/example.jpg" %}" alt="My image"/>
 

3.2 在django中使用媒体文件

    1)在settings中配置 MEDIA_ROOT
        MEDIA_ROOT = os.path.join(BASE_DIR, "media")
 

 

4. 文件上传

文件上传要求form表单存在enctype="multipart/form-data"属性,并且提交方法是post
    <form enctype="multipart/form-data" action="/uploadFile/" method="post"> 
       <input type="file" name="myfile" /> 
       <br/>  
       <input type="submit" value="upload"/> 
    </form>
 
最简单的文件上传:
    def file_upload(request):
       if request.method == ''POST'':
           # 获取上传的文件,如果没有文件,则默认为None
           myFile = request.FILES.get(''myfile'', None)
           if not myFile:
               return HttpResponse("no files for upload")
           file_path = os.path.join(settings.MEDIA_ROOT, ''1.jpg'')
           with open(file_path, ''ab'') as fp:
               for part in myFile.chunks():
                   fp.write(part)
           return HttpResponse("上传成功!")
       else:
           return render(request, ''index.html'')
 

 

5. 多文件上传

多文件上传和单文件上传类似
   1.需要在模板文件的form表单input中添加multiple
   2.后台获取时使用request.FILES.getlist(''myfile'', None)
def file_upload2(request):
   if request.method == ''POST'':
       # 获取上传的文件,如果没有文件,则默认为None
       myFiles = request.FILES.getlist(''myfile'', None)
       for myFile in myFiles:
           if not myFile:
               return HttpResponse("no files for upload")
 
           file_path = os.path.join(settings.MEDIA_ROOT, myFile.name)
           with open(file_path, ''ab'') as fp:
               for part in myFile.chunks():
                   fp.write(part)
                 
       return HttpResponse("上传成功!")
   else:
       return render(request, ''index.html'')
 

 

6.分页

6.1 分页工具

django提供了分页的工具,存在于django.core
    Paginator : 数据分页工具
    Page    : 具体的某一页面
导入Paginator
    from django.core.paginator import Paginator
Paginator:
对象创建: 
    Paginator(数据集,每一页数据数)
属性:
    count:对象总数
    num_pages:页面总数
    page_range: 页码列表,从1开始
方法:
    page(整数): 获得一个page对象
常见错误:
    InvalidPagepage()传递无效页码
    PageNotAnIntegerpage()传递的不是整数
    Emptypage()传递的值有效,但是没有数据
 
Page:
    对象获得,通过Paginatorpage()方法获得
属性:
    object_list    当前页面上所有的数据对象
    number 当前页的页码值
    paginator:  当前page关联的Paginator对象
方法:
    has_next()  :判断是否有下一页
    has_previous():判断是否有上一页
    has_other_pages():判断是否有上一页或下一页
    next_page_number():返回下一页的页码
    previous_page_number():返回上一页的页码
    len():返回当前页的数据的个数
 

 

django 中的媒体部分不会出现

django 中的媒体部分不会出现

如何解决django 中的媒体部分不会出现?

我无法上传图片文件。当我上传图像时,django 中没有媒体文件。 我添加了settings.py

MEDIA_URL = ''/media/''
MEDIA_ROOT = os.path.join(BASE_DIR,''media'')

urls.py

urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

views.py

def addArticle(request):
    form = ArticleForm(request.POST or None,request.FILES or None)
    if form.is_valid():
        article = form.save(commit=False)
        article.author = request.user
        article.save()
        messages.success(request,"Makale Başarıyla Oluşturuldu.")
        return redirect("index")
    return render(request,"addarticle.html",{"form":form})

forms.py

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ["title","content","article_image"]

当我将图片上传到我的文章时,我没有任何可查看的内容 模型.py

from django.db import models
from ckeditor.fields import RichTextField

class Article(models.Model):
    author = models.ForeignKey("auth.User",on_delete = models.CASCADE,verbose_name="Yazar")
    title = models.CharField(max_length = 50,verbose_name="Başlık")
    content = RichTextField()
    created_date = models.DateTimeField(auto_Now_add=True,verbose_name="Oluşturulma Tarihi")
    article_image = models.FileField(blank = True,null= True,verbose_name = "Fotoğraf Ekleyin.")
    def __str__(self):
        return self.title

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Django 静态文件和媒体文件配置

Django 静态文件和媒体文件配置

Django 静态文件和媒体文件配置

python manage.py runserver 80DEBUG=Ture 时候才加载静态文件,False 不加载静态文件。

在部署时设置 DEBUG=False 才加载静态文件

settings 文件设置如下:

STATIC_ROOT = ''assets''
STATIC_URL = ''/static/''
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, ''static'')
]

# 上传媒体文件
MEDIA_ROOT = ''media''  # 项目下的目录
MEDIA_URL = "/media/"  # 跟STATIC_URL类似,指定用户可以通过这个url找到文件

models 中设置上传字段:

class UserProfile(models.Model):
    username = models.ForeignKey(User, related_name=''User_Profiles'', on_delete=models.CASCADE)
    avatar = models.FileField(upload_to=''avatar'', blank=True,null=True, verbose_name=''头像'')

数据库中保存结果:avatar/12.png,存放在 media/avatar/12.png

模板中引用:

现在 settings 中设置:

TEMPLATES = [
    {
        ''BACKEND'': ''django.template.backends.django.DjangoTemplates'',
        ''DIRS'': [
            os.path.join(BASE_DIR, ''templates'')
        ],
        ''APP_DIRS'': True,
        ''OPTIONS'': {
            ''context_processors'': [
                ''这里省略了,下面这个才是重要的'',
                ''django.template.context_processors.media'',
            ],
        },
    },
]

在 URL.py 中的配置

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 这里是你的URL

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

在模板中引用:

<img src="{{ MEDIA_URL }}{{ user.User_Profiles.first.avatar }}" alt="{{ user.username }}" class="w-100 rounded">

Django中的静态文件和媒体文件有什么区别?

Django中的静态文件和媒体文件有什么区别?

我将移至Django 1.3,发现媒体和静态文件的这种分离有点令人困惑。这是默认的settings.py样子:

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com/media/","http://example.com/media/"
MEDIA_URL = ''

# Absolute path to the directory that holds static files.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = ''

# URL that handles the static files served from STATIC_ROOT.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

我应该投入MEDIA_ROOTSTATIC_ROOT?这些应该是单独的目录吗?有什么不同?

今天关于Django删除未使用的媒体文件django 删除文件的分享就到这里,希望大家有所收获,若想了解更多关于Django (七) token&静态文件&媒体文件、django 中的媒体部分不会出现、Django 静态文件和媒体文件配置、Django中的静态文件和媒体文件有什么区别?等相关知识,可以在本站进行查询。

本文标签: