参考博客:http://www.cognize.me/2016/05/09/djangopichtml
开始以前要先安装python图像处理库:python
pip install --use-wheel Pillow
命令行:python manage.py startapp img_db数据库
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'img_db', 'corsheaders', ]
例如:django
class IMG(models.Model): img = models.ImageField(upload_to='img') name = models.CharField(max_length=100)
这里的upload_to是指定图片存储的文件夹名称,上传文件以后会自动建立session
python manage.py makemigrations
python manage.py migrateapp
只须要在最后的静态文件区加上下面两行代码:cors
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/') #设置静态文件路径为主目录下的media文件夹 MEDIA_URL = '/media/' #url映射
注意:这是django默认的形式,若是想把模板放在其余路径,得本身从新配置。函数
uploadimg.htmlpost
<form method="POST" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="img"> <button type="submit">上传</button> </form>
showimg.htmlurl
{% for img in imgs %} <img src="{{ img.img.url }}" /> {% endfor %}
这里img是Django的Model里的一个实例对象,使用img.img.url能够获取他的url,并且在settings.py中已经对其作了静态映射
@csrf_exempt def uploadImg(request): if request.method == 'POST': new_img = IMG( img=request.FILES.get('img'), name = request.FILES.get('img').name ) new_img.save() return render(request, 'img_tem/uploadimg.html')
首先用get方式访问uploadImg(),而后会跳转到uploadimg.html页面,上传文件时会使用post再次访问uploadImg(),这时就会将图片存储在数据库与media/img_tem中。
@csrf_exempt def showImg(request): imgs = IMG.objects.all() content = { 'imgs':imgs, } for i in imgs: print i.img.url return render(request, 'img_tem/showimg.html', content
views.py下代码整理:
from django.shortcuts import render from img_db.models import IMG # Create your views here. # @csrf_exempt def uploadImg(request): if request.method == 'POST': new_img = IMG( img=request.FILES.get('img'), name = request.FILES.get('img').name ) new_img.save() return render(request, 'img_tem/uploadimg.html') # @csrf_exempt def showImg(request): imgs = IMG.objects.all() content = { 'imgs':imgs, } for i in imgs: print (i.img.url) return render(request, 'img_tem/showimg.html', content)
from django.conf.urls import url from django.contrib import admin import view from django.conf.urls.static import static from django.conf import settings urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^upload', view.uploadImg), url(r'^show', view.showImg), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 这句话是用来指定和映射静态文件的路径
完成以后就能够发布了。
命令行:python manage.py startapp file_db
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'file_db', 'corsheaders', ]
例如:
from __future__ import unicode_literals from django.db import models # Create your models here. class User(models.Model): username = models.CharField(max_length = 30) filename = models.FileField(upload_to = './file/') def __unicode__(self): return self.username
这里的upload_to是指定文件存储的文件夹名称,上传文件以后会自动建立
python manage.py makemigrations
python manage.py migrate
只须要在最后的静态文件区加上下面两行代码:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/') #设置静态文件路径为主目录下的media文件夹 MEDIA_URL = '/media/' #url映射
注意:这是django默认的形式,若是想把模板放在其余路径,得本身从新配置。
uploadfile.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>upload file</h1> <form method="post" enctype="multipart/form-data" > {{ form.as_p }} <input type="submit" value="Submit" /> </form> </body> </html>
showfile.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% for file in files %} <a href="{{ file.filename.url }}" >{{ file.username }}</a> {% endfor %} </body> </html>
这里file是Django的Model里的一个实例对象,使用file.filename.url能够获取他的url,并且在settings.py中已经对其作了静态映射
def uploadfile(request): if request.method == 'POST': form = UserForm(request.POST, request.FILES) if form.is_valid(): # 获取表单数据 username = form.cleaned_data['username'] filename = form.cleaned_data['filename'] # 获取数据库数据 user = User() user.username = username user.filename = filename user.save() return HttpResponse('file upload ok !') else: form = UserForm() return render_to_response('file_tem/uploadfile.html', {'form': form})
def showfile(request): files = User.objects.all() content = { 'files': files, } for i in files: print(i.filename.file) return render(request,'file_tem/showfile.html',content)
views.py下代码整理:
# -*- coding:utf-8 -*- from django.shortcuts import render from django.shortcuts import render_to_response from django import forms from django.http import HttpResponse from file_db.models import User # Create your views here. class UserForm(forms.Form): username = forms.CharField() filename = forms.FileField() def uploadfile(request): if request.method == 'POST': form = UserForm(request.POST, request.FILES) if form.is_valid(): # 获取表单数据 username = form.cleaned_data['username'] filename = form.cleaned_data['filename'] # 获取数据库数据 user = User() user.username = username user.filename = filename user.save() return HttpResponse('file upload ok !') else: form = UserForm() return render_to_response('file_tem/uploadfile.html', {'form': form}) def showfile(request): files = User.objects.all() content = { 'files': files, } for i in files: print(i.filename.url) return render(request,'file_tem/showfile.html',content)
# from django.contrib import admin from django.conf.urls.static import static from django.conf import settings from django.conf.urls import url from file_db import views as file_db urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^uploadfile', file_db.uploadfile), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
完成以后就能够发布了。