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 域名分析工具实现代码
Jul 15 Python
关于python的bottle框架跨域请求报错问题的处理方法
Mar 19 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
Oct 16 Python
python针对不定分隔符切割提取字符串的方法
Oct 26 Python
Python线程之定位与销毁的实现
Feb 17 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
Python中遍历列表的方法总结
Jun 27 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
Aug 02 Python
python speech模块的使用方法
Sep 09 Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 Python
Python爬虫回测股票的实例讲解
Jan 22 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实现验证码功能
2006/10/09 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
php中使用websocket详解
2016/09/23 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
Flask框架web开发之零基础入门
2018/12/10 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
python爬取内容存入Excel实例
2019/02/20 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
学python需要去培训机构吗
2020/07/01 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
管理站站长岗位职责
2013/11/27 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
导游词之张家界
2019/10/31 职场文书