1.文件上传
models文件
models.FileField(upload_to='指定文件路径')
html文件
form中注意加 enctype="multipart/form-data"
views文件
中从html中获取时:request.FILES.get('表单名字')
从models中获取时:和其他models一样,
注意:
文件和图片都有一个默认的.url属性,可以找到路径,但是setting中需要配置
video也可以以文件形式上传
2.上传图片
setting.py 文件配置,末尾添加
# 定义文件上传的位置
MEDIA_URL = '/photo/' # 媒体文件的虚拟路径
MEDIA_ROOT = 'media/photo/' # 部署的时候会用到
模型models.py文件
创建两个数据库,一个放照片,一个是相册
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
# 相册
class Album(models.Model):
# 定义三个字段,默认一个id
title = models.CharField("相册标题",max_length=100)
img = models.ImageField(upload_to='photo') # 封面
description = models.CharField("相册描述",max_length=300)
# 照片
class Photo(models.Model):
# 照片存在哪个相册里,一张照片对一个相册
album = models.ForeignKey(Album)
img = models.ImageField(upload_to='photo')
# 自动记录图片上传时间
created_at = models.DateTimeField('创建时间',auto_now_add=True)
#格式化,
def __str__(self):
return "%s" %self.img
urls.py 一级路由文件配置
# 引入基础模块
from django.conf.urls import url,include
from django.contrib import admin
from django.conf.urls.static import static #图片专属路径
from django_photo import settings
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app/',include('app.urls'))
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
views视图函数
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render
from django.http import HttpResponse
from app.models import Album
# 处理图片列表
def album_list(request):
#从数据库获取所有图片
albums = Album.objects.all()
# for album in albums:
# print(album.img.url)
# templates的渲染方法
return render(request,'index.html',{'albums':albums})
def add_photo(request):
pass
def save_album(request):
#判断方法,此处可用类视图
if request.method == 'GET':
return render(request,'add_album.html')
#
elif request.method == 'POST':
title = request.POST.get('title')
desc = request.POST.get('description')
img = request.FILES.get('myimg')
album = Album(title=title,description=desc,img=img)
album.save()
return HttpResponse("ok")
html文件
根据需要,可先写一个基础文件,其他继承补充