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解析xml模块封装代码
Feb 07 Python
python中遍历文件的3个方法
Sep 02 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
Python安装Flask环境及简单应用示例
May 03 Python
django基于restframework的CBV封装详解
Aug 08 Python
python turtle 绘制太极图的实例
Dec 18 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
python3 sleep 延时秒 毫秒实例
May 04 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
Python小白不正确的使用类变量实例
May 29 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 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垃圾回收机制引用计数器概念分析
2013/06/24 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
js里的prototype使用示例
2010/11/19 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
python连接mysql并提交mysql事务示例
2014/03/05 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
策划总监岗位职责
2014/02/16 职场文书
微笑服务演讲稿
2014/05/13 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
迎国庆演讲稿
2014/09/15 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
python可视化大屏库big_screen示例详解
2021/11/23 Python