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警察与小偷的实现之一客户端与服务端通信实例
Oct 09 Python
用Python进行基础的函数式编程的教程
Mar 31 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
在Mac OS上搭建Python的开发环境
Dec 24 Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
Python实现的生产者、消费者问题完整实例
May 30 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
详细分析Python垃圾回收机制
Jul 01 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 Python
python中对列表的删除和添加方法详解
Feb 24 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
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
Python集合操作方法详解
2020/02/09 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
法院实习人员自我鉴定
2013/09/26 职场文书
幼儿如何来做好自我评价
2013/11/05 职场文书
国培远程培训感言
2014/03/08 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python