Django 资源暴露

前端之家收集整理的这篇文章主要介绍了Django 资源暴露前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

资源暴露

   Django中允许将所有资源通过url暴露给页面

   这在用户上传头像时非常有用。

配置声明

   首先我们需要在settings.py下书写如下两句代码

   当没有该文件夹时自动创建。

# 用户上传文件存储位置
MEDIA_ROOT = os.path.join(BASE_DIR,"media")

模型路径

   我们在ORM中设置了用户头像的上传路径,将自动与配置中声明的文件夹做拼接。

class UserInfo(AbstractUser):
    phone = models.BigIntegerField(verbose_name="手机号",null=True,blank=True)
    avatar = models.FileField(
        verbose_name="头像",upload_to='avatar/',default='avatar/default.png',max_length=64)
        # 自动上传至根目录 media/avatar的文件夹下
        
    # 默认头像
    create_time = models.DateField(
        verbose_name="注册时间",auto_now=False,auto_now_add=True)

    blog = models.OneToOneField(to="Blog",on_delete=models.CASCADE,null=True)

    def __str__(self):
        return "对象-%s" % self.username

路由设置

   最后我们需要将该文件夹下的资源进行暴露,外部才能访问或查看到图片

#  media配置,暴露接口
from django.views.static import serve
from Blog import settings

# 暴露后端指定文件夹资源(可暴露任意文件夹,在settings中指定)
# 写法固定,后面不加斜杠
url(r"^media/(?P<path>.*)",serve,{"document_root": settings.MEDIA_ROOT}),

头像更新

   在用户创建时,关于头像我们是这样做的(关于文件对象不需要再手动读,再去写,直接指定就好,内部会全部帮你做好)。

   如果上传的是一个图片对象,会自动拿它的name属性添加media/avatar文件夹下。

if file_obj:
	clean_data["avatar"] = file_obj
	# 注意!用的auth组件,所以用create_user
models.UserInfo.objects.create_user(**clean_data)

   但是如果是设置头像,则不能直接用update,应该用下面的方式。

if request.method == "POST":
    file_obj = request.FILES.get("avatar")
    # 这样才可以自动添加 /avatar 的前缀
    user_obj = request.user
    user_obj.avatar = file_obj
    user_obj.save()
    
    # models.Userinfo.objects.filter(user=request.user).update(avatar=file_obj)
    # 出现错误,会直接将文件名丢进去,并且不会添加/avatar的前缀。所以不要用这种方式

猜你在找的Django相关文章