加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Django 资源暴露

发布时间:2020-12-15 17:11:13 所属栏目:大数据 来源:网络整理
导读:资源暴露 Django 中允许将所有资源通过 url 暴露给页面。 这在用户上传头像时非常有用。 配置声明 首先我们需要在 settings.py 下书写如下两句代码。 当没有该文件夹时自动创建。 # 用户上传文件存储位置MEDIA_ROOT = os.path.join(BASE_DIR,"media") 模型路

资源暴露

   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的前缀。所以不要用这种方式

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读