您的位置:首页 > 编程语言 > Go语言

django学习——media处理上传图片、文件方法设置

2018-01-05 10:38 851 查看
版本:
django 1.11


对于用户上传文件的存储,一般采用media进行处理。以用户头像为例进行说明,处理方法如下:

1、模型建立

from django.db import models
from django.contrib.auth.models import AbstractUser

from datetime import datetime

class UserProfile(AbstractUser):
"""
自定义用户
"""
nick_name = models.CharField(max_length=20, verbose_name='昵称', default='')
address = models.CharField(max_length=200, verbose_name='地址', default='')
telephone = models.CharField(max_length=11, verbose_name='手机')
gender = models.CharField(max_length=10, choices=(('male', '男'), ('female', '女')), default='male', verbose_name='性别')
birthday = models.DateField(verbose_name='生日', null=True, blank=True)
image = models.ImageField(max_length=100, upload_to='users/image/%Y/%m', default='users/image/default_big_14.png', verbose_name='头像')

class Meta:
verbose_name = '用户信息'
verbose_name_plural = verbose_name

def __str__(self):
return self.username


自定义用户,并完成头像(image)的字段设计,定义了头像的类型,ImageField,以及上传位置。

2、建立media文件夹

一般将用户上传的文件放置在media文件夹中。



3、setting.py中设置

主要有三个地方需要设置:

MEDIA_URL = ‘/media/’,设置该路径为了在模板中定位图片的位置,
<img src="{{ MEDIA_URL }}{{ user.image }}"/>
这样便可以从浏览器中得到头像的url地址,从而显示出来

MEDIA_ROOT = os.path.join(BASE_DIR, ‘media’) , 设置该路径是为了将新建的‘media’添加到根搜索路径下,这样在建立用户模型时的
image = models.ImageField(max_length=100, upload_to='users/image/%Y/%m',
, upload_to 指定的是相对闻之,通过设定MEDIA_ROOT,便可以将头像存储在:127.0.0.1:8000/meida/user/image/%Y/%m,目录下了。

设置TEMPLATES中的上下文管理器,添加media进来,如果不添加的话,模板中的{{ MEDIA_URL }}会找不到地址的。

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,  'templates'),],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media',
],
},
},
]


4、配置url

因为浏览器中显示图片,会从如下地址中寻找:
127.0.0.1:8000/meida/user/image/%Y/%m
, 如果不配置media的url地址的话,该图片是无法被找到
af52
的。配置方法如下:

from django.conf.urls import url
from django.views.static import serve

from mxonline3.settings import MEDIA_ROOT

urlpatterns = [

#配置上传文件的访问处理函数
url(r'^media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}),

]


经过如上几个步骤,便可以通过后台将图片写入数据库中,并从前端展示出来了。缺一不可!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐