django 实现图片上传和显示操作

版本:

  • django 2.0.1
  • python 3.6.2

准备工作:

  • pip install pillow 安装python图片处理库 pillow
  • pip install mysqlclient 安装mysql驱动包
  • django工程的创建和app的创建
  • 在settings.py文件中加载app

上传操作的实现:

  • 在所建app中修改models.py文件:
class Img(models.Model):
    img_url = models.ImageField(upload_to='img') # upload_to指定图片上传的途径,如果不存在则自动创建
  • 执行以下命令,建立项目与数据库之间的关系
python manage.py makemigrations
python manage.py migrate
  • 修该项目的settings.py文件

    • 加载mysql驱动并连接mysql,并添加图片上传的根目录
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   # 加载驱动
        'NAME': 'imgs',# 数据库名
        'USER': 'root',# mysql的用户名
        'PASSWORD': '',# mysql的密码
        'HOST': 'localhost', # 连接地址(本地的话使用localhost或者127.0.0.1)
        'PORT': 3306   # 数据库服务的端口号
    }
}
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/') # media即为图片上传的根路径
MEDIA_URL = '/media/'
  • 编写views.py文件
 def uploadImg(request): # 图片上传函数
    if request.method == 'POST':
        img = Img(img_url=request.FILES.get('img'))
        img.save()
    return render(request, 'imgupload.html')
  • 在urls.py文件中添加url映射路径
from imgTest.views import uploadImg # 添加
urlpatterns = [
    path('admin/', admin.site.urls),
    path('uploadImg/', uploadImg), # 新增
] 
  • 创建模板文件
    • 在所建app的目录新建文件夹templates,并创建imgUpload.html添加以下内容
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图片上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="img">
        <input type="submit" value="上传">
    </form>
</body>
</html>

图片的显示操作

  • 修改views.py文件添加图片显示函数
def showImg(request):
    imgs = Img.objects.all() # 从数据库中取出所有的图片路径
    context = {
        'imgs' : imgs
    }
    return render(request, 'showImg.html', context)
  • 修改urls.py添加映射并加载图片静态路径
from django.contrib import admin
from django.urls import path
from imgTest.views import uploadImg, showImg
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('uploadImg/', uploadImg),
    path('showImg/', showImg)
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  • 新建图片显示模板文件showImg.html,并添加以下内容
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图片展示</title>
</head>
<body>
    {% for item in imgs %}
        <img src="{{ item.img_url.url }}"><br/>
    {% endfor %}
</body>
</html>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页