Django入门:实现一个页面同时上传文本和图片,并保存至MySQL

Django实现一个页面上传Char和Image至后台MySQL

网上关于Django文件上传的教程,大多数使用单独页面,并在上传完成后页面跳转,这种方法虽然利于展示,但是对刚熟悉Django和html的新手来说不太友好,对于将文本和图片同时上传至数据库的简单需求可以用如下方法解决:
上传界面实例

settings.py

首先在MySQL中建立数据库,在Django中注册项目、连接数据库,并定义

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',#//数据库的类型
        'USER': 'root',                    #数据库服务器的用户
        'PASSWORD': 'root',               #密码
        'NAME': 'Mydata',
		# 'NAME':  所使用的的数据库的名字,大小写字母和MySQL中完全对应
        'HOST': '127.0.0.1',               #主机
        'PORT': '3306'                    #端口
    }
}

由于使用了图片的media功能,需要在TEMPLATES中声明:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.media', #加上这一行
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

增加Media文件夹用于存图片文件:

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

models.py

在数据库中定义字段格式,在这里定义了5个Char类型和一个Image类型:

#数据库
class User(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=50)
    age = models.CharField(max_length=100)
    gender = models.CharField(max_length=100)
    illhistry = models.CharField(max_length=100)
    img = models.ImageField(upload_to='')

    def __unicode__(self):
        return self.username

定义完成后要迁移:

python manage.py makemigrations
python manage.py migrate

views.py

然后在页面后台中增加获取数据和存入数据库的语句:

#上传
def upload(req):
    if req.method == 'POST':
        uf = UserForm(req.POST,req.FILES)
        if uf.is_valid():
            #获得表单数据
            username = uf.cleaned_data['username']
            password = uf.cleaned_data['password']
            age = uf.cleaned_data['age']
            gender = uf.cleaned_data['gender']
            illhistry = uf.cleaned_data['illhistry']
            img = uf.cleaned_data['img']
            #添加到数据库
            user = User.objects.create(username= username,password=password,age=age,gender=gender,illhistry=illhistry,iris=iris)
            user.save()
            return HttpResponse('upload success!!')
    else:
        uf = UserForm()
        return render(req,'test.html',context= {'uf':uf})

test.html

页面中的表单:

#上传
                     {% csrf_token %}
                     <p class="meta-info">
                         姓名:{{uf.username}}
                     </p>
                     <p class="meta-info">
                         密码:{{uf.password}}
                     </p>
                     <p class="meta-info">
                         年龄:{{uf.age}}
                     </p>
                     <p class="meta-info">
                         性别:{{uf.gender}}
                     </p>
                     <p class="meta-info">
                         既往病史:{{uf.illhistry}}
                     </p>
                     <p class="meta-info">
                         上传图片:{{uf.img}}
                     </p>
                     <p class="meta-info">
                         <input class="mybutton" type="submit" value = "完成" />
                     </p>

其他

这种方法将文本以Char的形式储存在MySQl数据表中,图片则是存储其在服务器中的路径。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值