在这篇文章中,我们将带领您了解Django删除未使用的媒体文件的全貌,包括django删除文件的相关情况。同时,我们还将为您介绍有关Django(七)token&静态文件&媒体文件、django中的媒
在这篇文章中,我们将带领您了解Django删除未使用的媒体文件的全貌,包括django 删除文件的相关情况。同时,我们还将为您介绍有关Django (七) token&静态文件&媒体文件、django 中的媒体部分不会出现、Django 静态文件和媒体文件配置、Django中的静态文件和媒体文件有什么区别?的知识,以帮助您更好地理解这个主题。
本文目录一览:- Django删除未使用的媒体文件(django 删除文件)
- Django (七) token&静态文件&媒体文件
- 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&静态文件&媒体文件
token&静态文件&媒体文件
1. token
1. 会话技术
2. 服务端会话技术
3. 它实际上就是手动实现的session
4. 实现token
4.1 在models.py中User类中添加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.staticfiles在 INSTALLED_APPS中
2)在settings中定义 STATIC_URL
STATIC_URL = ''/static/''
3)在你app的static目录中存放静态文件,比如:
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对象
常见错误:
InvalidPage:page()传递无效页码
PageNotAnInteger:page()传递的不是整数
Empty:page()传递的值有效,但是没有数据
Page:
对象获得,通过Paginator的page()方法获得
属性:
object_list: 当前页面上所有的数据对象
number: 当前页的页码值
paginator: 当前page关联的Paginator对象
方法:
has_next() :判断是否有下一页
has_previous():判断是否有上一页
has_other_pages():判断是否有上一页或下一页
next_page_number():返回下一页的页码
previous_page_number():返回上一页的页码
len():返回当前页的数据的个数
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 静态文件和媒体文件配置
python manage.py runserver 80
在 DEBUG=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 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_ROOT
和STATIC_ROOT
?这些应该是单独的目录吗?有什么不同?
今天关于Django删除未使用的媒体文件和django 删除文件的分享就到这里,希望大家有所收获,若想了解更多关于Django (七) token&静态文件&媒体文件、django 中的媒体部分不会出现、Django 静态文件和媒体文件配置、Django中的静态文件和媒体文件有什么区别?等相关知识,可以在本站进行查询。
本文标签: