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使用点操作符访问字典(dict)数据的方法
Mar 16 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
python保存文件方法小结
Jul 27 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
Python存储读取HDF5文件代码解析
Nov 25 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
PHP错误机制知识汇总
2016/03/24 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
python进阶教程之动态类型详解
2014/08/30 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
Python sep参数使用方法详解
2020/02/12 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
详解python程序中的多任务
2020/09/16 Python
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
一套SQL笔试题
2016/08/14 面试题
Linux常见面试题
2016/10/04 面试题
教师的实习自我鉴定
2013/12/17 职场文书
党校培训自我鉴定
2014/02/01 职场文书
农行心得体会
2014/09/02 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书