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 yield 使用浅析
May 28 Python
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 Python
Python编程求解二叉树中和为某一值的路径代码示例
Jan 04 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
Python爬虫beautifulsoup4常用的解析方法总结
Feb 25 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
Oct 06 Python
基于Python把网站域名解析成ip地址
May 25 Python
简单了解Python多态与属性运行原理
Jun 15 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
Python中re模块的元字符使用小结
Apr 07 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
JAVA/JSP学习系列之四
2006/10/09 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
js实现图片实时时钟
2020/01/15 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
Python中list初始化方法示例
2016/09/18 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
Django中的静态文件管理过程解析
2019/08/01 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
办公室助理岗位职责
2013/12/25 职场文书
公司建议书怎么写
2014/05/15 职场文书
2014年安全生产责任书
2014/07/22 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书