前言
学无止境,无止境学。大家好,我是张大鹏,之前在抖音有5万多粉丝,不过现在不拍视频,专心写公众号了。笔者目前是高级Python工程师,之前是全栈工程师,主要擅长Golang和Python开发,对于Java,Vue,React也有一些研究。工作之余,喜欢学习和分享,希望能够通过此公众号”张大鹏520″,将自己学到的东西分享给大家,和大家一起交流,一起成长,一起进步。
今天要给大家分享的是《Django加Vue电商项目实战09 表单文件上传实战》,这是一个系列的教程,从零基础到项目实战。在本教程中,我会给大家介绍Django的表单文件上传实战的一个案例。主要包括模型创建,表单创建,表单校验,媒体文件配置等。还会配套相关的练习,大家学完以后可以自行通过练习题巩固和加深对知识点的理解。
如果大家需要本教程的PDF电子书或者完整的源码,可以在文末找到获取方式哈。
表单文件上传实战
数据库配置
引入zdppy_mysql引擎:
import zdppy_mysql
zdppy_mysql.install_as_MySQLdb()
配置数据库:
# 数据库信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_shop', # 数据库名
'USER': 'root', # 用户名
'PASSWORD': 'root', # 密码
'HOST': '192.168.33.12', # 主机
'PORT': '3306',
# 取消外键约束,否则多对多模型迁移报django.db.utils.IntegrityError: (1215, 'Cannot add foreign key constraint')
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;",
'charset': 'utf8'
},
}
}
日志配置:
# 配置日志
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
# 日志处理器
'handlers': {
# 控制台日志处理器
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
'loggers': {
# SQL语句输出到控制台
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level': 'DEBUG',
},
}
}
媒体文件配置
配置文件存储目录:
# 文件配置
STATICFILES_DIRS = [BASE_DIR / 'static']
STATIC_URL = '/static/'
if not DEBUG:
STATIC_ROOT = BASE_DIR / 'static'
MEDIA_URL = "/media/"
MEDIA_ROOT = BASE_DIR / "media"
配置文件路由:
from django.contrib import admin
from django.urls import path, include, re_path
from django.views.static import serve
from . import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('', include("index.urls")),
# 配置媒体文件目录
re_path('^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT})
]
模型设计
设计模型:
from django.db import models
class ImgFile(models.Model):
"""文件模型"""
# 文件名称
name = models.CharField(verbose_name='名称', default='', max_length=30)
# 文件地址
headimg = models.FileField(verbose_name='路径', upload_to="uploads/")
def __str__(self):
return str(self.name)
class Meta:
verbose_name = '用户头像信息'
db_table = 'user_img'
迁移模型:
python manage.py makemigrations
python manage.py migrate
路由设计
from django.urls import path
from . import views
app_name = 'index'
urlpatterns = [
# 上传图片
path('upload_img/', views.upload_img, name='upload_img'),
]
表单设计
import re
from django import forms
from django.core.exceptions import ValidationError
class ImgFileForm(forms.Form):
"""图片上传表单"""
# 图片名称
name = forms.CharField()
# 文件地址
headimg = forms.FileField()
视图函数
import os
from django.http import HttpResponse
from django.shortcuts import render
from .forms import UserInfoForm, UserInfoValidateForm, ImgFileForm
from .models import ImgFile
def upload_img(request):
if request.method == "GET":
# 渲染页面
f = ImgFileForm()
return render(request, "upload_img.html", {'form_obj': f})
else:
# 校验表单数据并保存
f = ImgFileForm(request.POST, request.FILES)
if f.is_valid():
# 获取数据
name = f.cleaned_data['name']
headimg = f.cleaned_data['headimg']
# 创建文件模型并保存
userimg = ImgFile()
userimg.name = name
userimg.headimg = headimg
userimg.save()
# 渲染页面
print("上传成功")
return render(request, "upload_img.html", {'form_obj': f, 'user': userimg})
模板
<form enctype="multipart/form-data" action="{% url 'index:upload_img' %}" method="post">
{% csrf_token %}
{{ form_obj.as_p }}
<br/>
<input type="submit" value="文件上传"/>
<img src="/media/{{ user.headimg }}">
</form>
测试
测试地址:http://192.168.33.13:8000/upload_img/
结语
关注我不迷路,欢迎关注我的微信公众号”张大鹏520″,如果您对此文章感兴趣,欢迎点赞收藏,留言评论。
文中所有代码,只需要打赏20元,然后留言评论“已打赏”,即可获取哦。
本文的PDF电子书版,只需要打赏3元,然后留言评论“已打赏”,即可获取哦。
写文章不容易,不喜勿喷哈,如果有想要学编程,学项目,或者在工作中有项目难以单独完成需要提供帮助的同学,欢迎私信我哈。生活不易,想要利用学到的编程知识,业余赚点零花钱。
接项目:网站开发,APP开发,各种管理系统开发。
带徒弟:Python编程教学,Golang编程教学,前端编程教学。
谢谢您!!!
原文始发于微信公众号(张大鹏520):Django加Vue电商项目实战09 表单文件上传实战
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/48606.html