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()
解析:
FileField与ImageFiled字段其实是一样的,唯一的区别:前者文件和图片都可以上传,后者只能上传图片。
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})


浙公网安备 33010602011771号