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写的一个文本编辑器
Jan 23 Python
介绍Python中内置的itertools模块
Apr 29 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
python 从csv读数据到mysql的实例
Jun 21 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
python字典一键多值实例代码分享
Jun 14 Python
Python基础学习之类与实例基本用法与注意事项详解
Jun 17 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
详解python tcp编程
Aug 24 Python
python识别验证码的思路及解决方案
Sep 13 Python
python爬虫请求头的使用
Dec 01 Python
使用Python通过企业微信应用给企业成员发消息
Apr 18 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控制文件下载速度的方法
2015/03/24 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
Python的time模块中的常用方法整理
2015/06/18 Python
python实现发送邮件及附件功能
2021/03/02 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
学院书画协会部门职责
2013/11/28 职场文书
委托证明的格式
2014/01/10 职场文书
物资采购方案
2014/06/12 职场文书
通信工程求职信
2014/07/16 职场文书
销售会议开幕词
2015/01/28 职场文书
党员活动总结
2015/02/04 职场文书
收银员岗位职责范本
2015/04/07 职场文书
大学入学感言
2015/08/01 职场文书
物资采购管理制度
2015/08/06 职场文书