Django 实现图片上传和显示过程详解


Posted in Python onJuly 18, 2019

第1章 新建工程和创建app

新建工程和创建app就不用贴出来了,我这里是测试图片上传的功能能否实现,所以项目都是新的,正常在以有的app下就可以

第2章 模型层:

2.1创建数据库

from django.dbimport models

# Create your models here.
class User(models.Model):
  name= models.CharField(max_length=50)
  # upload_to 指定上传文件位置
  # 这里指定存放在img/ 目录下
  headimg = models.FileField(upload_to="img/")

  # 返回名称
  def__str__(self):
    returnself.name

2.2初始化数据库:

(mypy3) ➜ BBS python manage.py makemigrations

Migrations for 'app01':

 app01/migrations/0001_initial.py

  - Create model User

(mypy3) ➜ BBS python manage.py migrate    

Operations to perform:

 Apply all migrations: admin, app01, auth, contenttypes, sessions

第3章 修改配置文件

3.1settings中增加如下配置:

MEDIA_ROOT= os.path.join(BASE_DIR, 'media').replace("\\", "/")
MEDIA_URL = '/media/'

3.2工程的urls文件:

from django.conf.urlsimport url
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
  url(r'^admin/', admin.site.urls),
  # url(r'^regsiter/', views.regsiter),
  # url(r'', TemplateView.as_view(template_name="app01/index.html")),
  path('app01/', include('app01.urls'))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3.3app:

from django.urlsimport path
from . import views

app_name = 'app01'
urlpatterns = [
  path('add/', views.add, name='add'),
  # path('index/', views.index, name='index'),
]

3.4修改模版配置:

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

第4章 数据校验模块:

数据需要校验的情况下,如果你不想校验,这个可以忽略

4.1在app下创建forms文件:

from django import forms

# 表单类用以生成表单
class AddForm(forms.Form):
  name = forms.CharField()
  headimg = forms.FileField()

第5章 视图层:

5.1编写图片处理逻辑

from django.shortcutsimport render
from .models import User
from .forms import AddForm

# Create your views here.
def add(request):
  # 判断是否为post 方法提交
  ifrequest.method == "POST":
    af = AddForm(request.POST, request.FILES)
    # 判断表单值是否和法
    ifaf.is_valid():
      name = af.cleaned_data['name']
      headimg = af.cleaned_data['headimg']
      user = User(name=name, headimg=headimg)
      user.save()
      returnrender(request, 'app01/index.html', context={"user":user})
  else:
    af = AddForm()
    returnrender(request, 'app01/add.html', context={"af":af})

第6章 模版层:

上传的html

<!-- templates/users/add.html -->
<!doctype html>
<html>
<head>
  <title>Add</title>
  <meta charset="utf-8">
</head>
<body>
  <h1>Add!</h1>

  <form method="post" enctype="multipart/form-data" action="{% url'app01:add' %}">
    {%csrf_token %}
    {{ af.as_p }}
    <inputtype="submit" value="OK"/>
  </form>
</body>
</html>

查看的html

<!-- templates/users/index.html -->
<!doctype html>
<html>
<head>
  <title>Detail</title>
  <meta charset="utf-8">
</head>
<body>
  <p>{{user.name}}</p>
  <img width="50%" height="50%"src="/media/{{ user.headimg }}">
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现二维有序数组查找的方法
Apr 27 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
pygame实现简易飞机大战
Sep 11 Python
使用Python画股票的K线图的方法步骤
Jun 28 Python
让你的Python代码实现类型提示功能
Nov 19 Python
pytorch实现focal loss的两种方式小结
Jan 02 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
简单的Python人脸识别系统
Jul 14 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 Python
Django框架模型简单介绍与使用分析
Jul 18 #Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 #Python
django 2.2和mysql使用的常见问题
Jul 18 #Python
详解Python二维数组与三维数组切片的方法
Jul 18 #Python
Django框架视图介绍与使用详解
Jul 18 #Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 #Python
使用django实现一个代码发布系统
Jul 18 #Python
You might like
第十一节 重载 [11]
2006/10/09 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
Javascript 事件流和事件绑定
2009/07/16 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
用python批量移动文件
2021/01/14 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
出国留学自荐信
2013/10/25 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
初三开学计划书
2014/04/27 职场文书
护理目标管理责任书
2014/07/25 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
军人离婚协议书样本
2014/10/21 职场文书
大学生实习介绍信
2015/05/05 职场文书
民事上诉状范文
2015/05/22 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript