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常见文件操作的函数示例代码
Nov 15 Python
python代码制作configure文件示例
Jul 28 Python
跟老齐学Python之??碌某?? target=
Sep 12 Python
查看Python安装路径以及安装包路径小技巧
Apr 28 Python
python创建一个最简单http webserver服务器的方法
May 08 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
Python网络爬虫出现乱码问题的解决方法
Jan 05 Python
Python使用QQ邮箱发送Email的方法实例
Feb 09 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
python中强大的format函数实例详解
Dec 05 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
python正则表达式 匹配反斜杠的操作方法
Aug 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
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
Python读写文件方法总结
2015/06/09 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
keras 多gpu并行运行案例
2020/06/10 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
Python可以用来做什么
2020/11/23 Python
python 模拟登陆163邮箱
2020/12/15 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
大一自我鉴定范文
2013/10/04 职场文书
珍惜水资源建议书
2014/03/12 职场文书
党员作风建设自查报告
2014/10/23 职场文书
党支部承诺书
2015/01/20 职场文书
三八妇女节寄语
2015/02/27 职场文书
单位证明范文
2015/06/18 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python