Django基础-static和media

static和media都是存放文件的地方,但是又有区别,以下是两个文件夹的区别和用法

static

定义

static是静态文件,主要存的是CSS, JavaScript, 网站logo等不变的文件。

配置

配置settings.py

STATIC_URL = '/static/'  # 静态文件别名(相对路径) 和 绝对路径
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'app01/static'),
)
# STATIC_ROOT 配置部署的时候才用

使用

在项目中将模板层用到的静态文件都放入该文件夹中,做好解耦

media

定义

media主要用来保存用户上传的文件,例如图片等

配置

配置settings.py

MEDIA_URL = "/media/"   # 媒体文件别名(相对路径) 和 绝对路径
MEDIA_ROOT = (
    os.path.join(BASE_DIR, 'app01/media')
)

配置路由

from django.urls import path,include,re_path
from blog import views
from django.views.static import serve
from .settings import MEDIA_ROOT

urlpatterns = [
    # ... the rest of your URLconf goes here ...
    re_path('/media/(?P<path>.*)',serve,{'document_root': MEDIA_ROOT})

使用

在models.py中使用

from django.db import models


class UserInfo(models.Model):
    username = models.CharField(verbose_name='用户名', max_length=32)
    avatar = models.FileField(verbose_name='头像', upload_to='upload/avatar/')

在view.py中使用

def register(request):
    if request.method=='POST':
        # print(request.POST)
        response={'user':None,'msg':None}
        form=UserForm(request.POST)
        if form.is_valid():
            username=form.cleaned_data.get('username')
            pwd=form.cleaned_data.get("pwd")
            email=form.cleaned_data.get('email')
            telephone=form.cleaned_data.get('telephone')
			#获取上传的文件对象            
            avatar_obj=request.POST.FILES.get('avatar')
			#直接将文件对象传入models函数
            user_boj=UserInfo.objects.create_user(
                username=username,
                password=pwd,
                email=email,
                telephone=telephone,
                avatar=avatar_obj,
            )





        else:
            response['msg']=form.errors
            print(form.errors)
        return JsonResponse(response)


    form=UserForm(request.POST)
    return render(request,'register.html',locals())

upload_to相当于上传到app01/media/upload/avatar/目录下。
如果不设置media,文件将直接上传到根目录下。
FileField或ImageField字段适用于存储文件/图片,出于性能考虑,文件并不直接保存到数据库,而是保存在文件系统里,因此该字段只是记录一个路径而已。
这个路径是相对于MEDIA_ROOT的,要想得到文件/图片的绝对路径,需要用.url方法。比如,要在页面中显示用户user_obj的头像,那么在模板中可以这样写:

<img src="{{ user_obj.avatar.url }}" alt="user_avatar">
发布了64 篇原创文章 · 获赞 46 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_42737442/article/details/85961649