前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python+mysql上传图片和上传文件 转

python+mysql上传图片和上传文件 转

作者头像
晓歌
发布2018-08-15 14:32:58
1.7K0
发布2018-08-15 14:32:58
举报
文章被收录于专栏:破晓之歌破晓之歌破晓之歌

一、上传与展示图片

参考博客http://www.cognize.me/2016/05/09/djangopic

开始之前要先安装python图像处理库:

pip install --use-wheel Pillow

1、数据库设置

1.1. 先创建一个app,比如叫img_db。

命令行:python manage.py startapp img_db

1.2. 将其加入到settings.py文件中的INSTALLED_APPS中

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'img_db',
    'corsheaders',
]

1.3. 在models.py中创建表,图片存储使用的是 models.ImageField

例如:

class IMG(models.Model):
    img = models.ImageField(upload_to='img')
    name = models.CharField(max_length=100)

这里的upload_to是指定图片存储的文件夹名称,上传文件之后会自动创建

1.4. 更新数据库

python manage.py makemigrations python manage.py migrate

2、修改配置文件setting.py

只需要在最后的静态文件区加上下面两行代码:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')     #设置静态文件路径为主目录下的media文件夹
MEDIA_URL = '/media/'                                                 #url映射

3、创建模板

3.1. 在APP目录下创建文件夹templates  

注意:这是django默认的形式,如果想把模板放在其他路径,得自己重新配置。

3.2. 在templates文件夹下创建文件夹,比如叫img_tem

3.3. 在img_tem下创建模板

uploadimg.html

<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="img">
<button type="submit">上传</button>
</form>

showimg.html

{% for img in imgs %}
<img src="{{ img.img.url }}" />
{% endfor %}

这里img是Django的Model里的一个实例对象,使用img.img.url可以获取他的url,而且在settings.py中已经对其做了静态映射

4、创建视图函数 view.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)

5、url.py配置

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)  这句话是用来指定和映射静态文件的路径

完成之后就可以发布了。

二、上传与下载文件

1、数据库设置

1.1. 先创建一个app,比如叫file_db。

命令行:python manage.py startapp file_db

1.2. 将其加入到settings.py文件中的INSTALLED_APPS中

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'file_db',
    'corsheaders',
]

1.3. 在models.py中创建表,文件存储使用的是 models.FileField

例如:

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是指定文件存储的文件夹名称,上传文件之后会自动创建

1.4. 更新数据库

python manage.py makemigrations python manage.py migrate

2、修改配置文件setting.py

只需要在最后的静态文件区加上下面两行代码:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')     #设置静态文件路径为主目录下的media文件夹
MEDIA_URL = '/media/'                                                 #url映射

3、创建模板

3.1. 在APP目录下创建文件夹templates  

注意:这是django默认的形式,如果想把模板放在其他路径,得自己重新配置。

3.2. 在templates文件夹下创建文件夹,比如叫file_tem

3.3. 在file_tem下创建模板

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中已经对其做了静态映射

4、创建视图函数 view.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)

5、url.py配置

# 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)

完成之后就可以发布了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、上传与展示图片
    • 1、数据库设置
      • 1.1. 先创建一个app,比如叫img_db。
      • 1.2. 将其加入到settings.py文件中的INSTALLED_APPS中
      • 1.3. 在models.py中创建表,图片存储使用的是 models.ImageField
      • 1.4. 更新数据库
    • 2、修改配置文件setting.py
      • 3、创建模板
        • 3.1. 在APP目录下创建文件夹templates  
        • 3.2. 在templates文件夹下创建文件夹,比如叫img_tem
        • 3.3. 在img_tem下创建模板
      • 4、创建视图函数 view.py
        • 5、url.py配置
        • 二、上传与下载文件
          • 1、数据库设置
            • 1.1. 先创建一个app,比如叫file_db。
            • 1.2. 将其加入到settings.py文件中的INSTALLED_APPS中
            • 1.3. 在models.py中创建表,文件存储使用的是 models.FileField
            • 1.4. 更新数据库
          • 2、修改配置文件setting.py
            • 3、创建模板
              • 3.1. 在APP目录下创建文件夹templates  
              • 3.2. 在templates文件夹下创建文件夹,比如叫file_tem
              • 3.3. 在file_tem下创建模板
            • 4、创建视图函数 view.py
              • 5、url.py配置
              相关产品与服务
              云数据库 SQL Server
              腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档