第三百八十七節,Django+Xadmin打造上線標準的在線教育平臺—網站上傳資源的配置與顯示
阿新 • • 發佈:2017-09-17
req model online super ddr import bsp class ews
第三百八十七節,Django+Xadmin打造上線標準的在線教育平臺—網站上傳資源的配置與顯示
首先了解一下static靜態文件與上傳資源的區別,static靜態文件裏面一般防止的我們網站樣式的文件,包括ccs,js,網站樣式圖片
上傳資源是用戶操作上傳的圖片等資源
上傳資源的配置
1,首先在項目裏創建一個名稱叫media的文件夾專門保存用戶上傳
2,settings.py文件配置上傳資源的路徑
# 上傳資源路徑,如果圖片,上傳文件等 MEDIA_URL = ‘/media/‘ # 設置上傳資源前綴名稱 MEDIA_ROOT = os.path.join(BASE_DIR, ‘media‘) # 設置上傳文件路徑
這樣配置好後,當用戶上傳文件時,會根據數據表類的上傳字段設置來,將文件上傳到,media文件夾裏,如下
數據表類
class CourseOrg(models.Model): name = models.CharField(max_length=50, verbose_name=‘機構名稱‘) desc = models.TextField(verbose_name=‘機構描述‘) category = models.CharField(max_length=20, verbose_name=‘機構類別‘, default=‘pxjg‘, choices=((‘pxjg‘, ‘培訓機構‘), (‘gx‘, ‘高校‘), (‘gr‘, ‘個人‘))) click = models.IntegerField(default=0, verbose_name=‘點擊數‘) fav_nums = models.IntegerField(default=0, verbose_name=‘收藏數‘) image = models.ImageField(upload_to=‘org/%Y/%m‘, verbose_name=‘封面圖‘, max_length=100) address = models.CharField(max_length=150, verbose_name=‘機構地址‘) city = models.ForeignKey(CityDict, verbose_name=‘外鍵城市表‘) add_time = models.DateTimeField(default=datetime.now, verbose_name=‘添加日期‘) class Meta: verbose_name = ‘課程機構表‘ verbose_name_plural = verbose_name def __str__(self): return self.name
此時可以看到上傳文件安裝年月來保存文件,那麽怎麽設置文件名
設置上傳文件名稱
1、先在你項目中添加一個文件夾如:system
在文件夾下添加__init__.py
和storage.py
文件,並在storage.py
中添加如下代碼:
# -*- coding: UTF-8 -*- from django.core.files.storage import FileSystemStorage from django.http import HttpResponse
class ImageStorage(FileSystemStorage): from django.conf import settings def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL): # 初始化 super(ImageStorage, self).__init__(location, base_url) # 重寫 _save方法 def _save(self, name, content): #name為上傳文件名稱 import os, time, random # 文件擴展名 ext = os.path.splitext(name)[1] # 文件目錄 d = os.path.dirname(name) # 定義文件名,年月日時分秒隨機數 fn = time.strftime(‘%Y%m%d%H%M%S‘) fn = fn + ‘_%d‘ % random.randint(0,100) # 重寫合成文件名 name = os.path.join(d, fn + ext) # 調用父類方法 return super(ImageStorage, self)._save(name, content)
2、在models.py
文件中添加如下代碼:
在數據庫文件導入我們設置的類
在上傳字段裏設置storage=ImageStorage()執行類,就是我們自定義storage.py
中的類
from system.storage import ImageStorage pic=models.ImageField(upload_to=‘img/%Y/%m/%d‘,storage=ImageStorage()) #如果上傳文件可以將ImageField換為FileField
上傳文件顯示
上傳的文件如圖片,要在前臺或者後臺顯示,就需要配置才能顯示
要給上傳文件訪問配置一個專門的url路由映射
from django.conf.urls import url, include # 導入django自在的include邏輯 from django.contrib import admin from django.views.generic import TemplateView # 導入django自帶的TemplateView邏輯 from django.views.static import serve # 導入django自帶的serve靜態資源邏輯 import xadmin # 導入xadmin from app_users.views import deng_lu, zhu_ce, active_code, logout # 導入登錄邏輯處理類 from app_organization.views import org_list # 導入授課機構邏輯 from MxOnline.settings import MEDIA_ROOT urlpatterns = [ url(r‘^xadmin/‘, xadmin.site.urls), url(r‘^index.html‘, TemplateView.as_view(template_name=‘index.html‘), name=‘index‘), # 註冊 url(r‘^register.html‘, zhu_ce.as_view(), name=‘register‘), url(r‘^captcha/‘, include(‘captcha.urls‘), name=‘captcha‘), url(r‘^active/(?P<active_de>.*)/$‘, active_code.as_view(), name="user_active"), # 登錄 url(r‘^login.html‘, TemplateView.as_view(template_name=‘login.html‘), name=‘login‘), url(r‘^deng_lu‘, deng_lu.as_view(), name=‘deng_lu‘), url(r‘^logout‘, logout.as_view(), name=‘deng_lu‘), # 授課機構 url(r‘^org_list.html‘, org_list.as_view(), name=‘org_list‘), # 專門處理靜態資源請求映射,也就是media上傳文件夾裏的請求映射 url(r‘media/(?P<path>.*)$‘, serve, {‘document_root‘: MEDIA_ROOT}) # MEDIA_ROOT為配置上傳文件的路徑變量 ]
此時後臺可以顯示圖片了
前臺顯示可以通過settings.py配置的上傳資源前綴名稱來拼接路徑顯示
HTML文件
<a href="org-detail-homepage.html"> <img width="200" height="120" class="scrollLoading" data-url="{{ MEDIA_URL }}{{ ji.image }}"/> {# 需要拼接靜態資源路徑 #} </a>
註意:如果在html文件要獲取到settings.py配置的MEDIA_URL,需要在配置文件設置一個靜態資源處理類
TEMPLATES = [ { ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘, ‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)], # 配置模板文件路徑,也就是html路徑 ‘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‘, # 配置html頁面獲取MEDIA_URL路徑 ], }, }, ]
第三百八十七節,Django+Xadmin打造上線標準的在線教育平臺—網站上傳資源的配置與顯示