5 头像上传FileField字段

1 Django的auth认证模块:

要使用Django的auth模块,必须要继承Django的UserInfo,在写入自己的字段。

from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):
    """
    用户信息
    """
    nid = models.AutoField(primary_key=True)
    telephone = models.CharField(max_length=11, null=True, unique=True)
    avatar = models.FileField(upload_to='avatars/', default="/avatars/default.png")  # 头像文件
    # create_img = models.IntegerField()

解析:

FileFieldImageFiled字段其实是一样的,唯一的区别:前者文件和图片都可以上传,后者只能上传图片。

user = form.cleaned_data.get("user")
pwd = form.cleaned_data.get("pwd")
email = form.cleaned_data.get("email")
avatar_obj = request.FILES.get("avatar")

if not avatar_obj:
    user_obj = models.UserInfo.objects.create_user(username=user, password=pwd, email=email)

user_obj = models.UserInfo.objects.create_user(username=user, password=pwd, email=email, avatar=avatar_obj)

Django做的事情:

upload_to='avatars/'  跟的是一个文件路径
当你上传一个文件时,判断在根目录下是否有一个avatars的文件夹,没有则自动创建,最后上传到该文件夹中。
avatar在数据中,存储的是一个相对路径。

2 media配置:

Django有两种静态文件

  • static文件夹:是服务器自己要用到的静态文件。如:css、js、img、bootstrap
  • media文件夹:用户上传的文件夹。

settings.py配置

# 手动在项目根目录下创建media文件夹
# settings配置如下:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Django做的事情:

会将文件对象下载到MEDIA_ROOT中avatars文件夹中(如果没有avatars文件夹,Django会自动创建)

3 media配置之MEDIA_ROOT

客户端浏览器如何能直接访问到media中的数据?默认不配置,用户是不能直接访问media中的数据。

setting.py配置

# 与用户上传相关配置
MEDIA_URL = '/media/'  # 别名
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

urls.py配置

from django.views.static import serve
from django.conf import settings

# media配置
re_path(r"media/(?P<path>.*)$", serve, {"document_root": settings.MEDIA_ROOT})

image

posted @ 2022-08-17 14:38  角角边  Views(24)  Comments(0)    收藏  举报