静态文件
Django中静态文件包括css, 图片, js等文件,一般需要将静态文件放到一个单独的目录中,在html页面中调用需要指定路径. 可以发到项目根目录下也可以放到应用目录下,在settings,py配置目录
STATIC_URL='/static/'
# 静态文件目录
STATICFILES_DIRS=[os.path.join(BASE_DIR,"static"),]
然后在目录下创建static目录,主要文件名必须是static,要与settings.py文件中的文件名一致, 在创建images, css , js目录,在项目views.py文件编写相应视图函数和配置相应路径渲染到页面上,然后在templates目录下的.html文件调用即可
上传图片
在Django中上传图片有两种, 一是在后台管理页面上上传图片, 二是在自定义form表单中上传图片, 当上传图片后将图片存在在服务器上,然后将图片的路径存储放在数据表中,并再次建项目调整为调试模式.
后台上传图片 :
首先创建包含图片的模型类PostImg,并将模型类的一个属性值定义成models.ImageField类型
第一步: 在models.py文件下定义模型类PostImg,同时设定一个属性picture,avatar保存图片的文件名,
class PostImg(models.Model):
picture = models.ImageField(upload_to='avatar')
定义了模型类后,不要忘了生成迁移文件和执行迁移文件
第二步: 配置图片保存路径,因为图片也属于静态文件,因此可以保存到static目录下
# 访问上传资源media路径
MEDIA_URL = "/media/"
# # 存储上传资源的路径
MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")
**第三步:**进入后台上传图片需要建一个管理员
①打开admin.py文件,进行注册PostImg
class PostImgAdmin(admin.ModelAdmin):
list_display = ['id','picture']
admin.site.register(PostImg,PostImgAdmin)
②运行服务器,输入网址进入admin后台管理找到PostImg,点击add添加数据,选择添加图片,即可在static目录下找到刚才所添加的图片,说明图片成功被添加到服务器目录下。
自定义form表单上传图片
①创建视图函数test_upload
逻辑:
1. 获取图片对象 imgObj=request.FILES.get(‘avatar’)
2. 获取图片的原始名字imgObj.name --pcauto-59.png
3. 一次性获取图片的二进制代码 imgObj.file
4. 读取代码
5. 写入文件
def test_upload(request):
if request.method=='GET':
return render(request,'book/test_upload.html')
else:
imgObj=request.FILES.get('avatar')
fname=os.path.join(settings.MEDIA_ROOT,imgObj.name)
print(fname)
with open(fname,"wb") as rfile:
data = imgObj.file.read()
rfile.write(data)
return HttpResponse("上传成功")
添加路径
url(r"^test_upload",test_upload),
在templates目录下创建htnl文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/book/test_upload" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="avatar">
<button>提交</button>
</form>
</body>
</htm