liuw-flexi
.
├── db.sqlite3
├── manage.py
├── myImg
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── settings.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── wsgi.cpython-36.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── static
│   └── media
│       ├── 1493297157_517565.jpg
│       ├── 3.png
│       └── 6.png
├── templates
│   └── myImg
│       ├── showImg.html
│       └── uploadPic.html
└── upLoadImg
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-36.pyc
    │   ├── admin.cpython-36.pyc
    │   ├── models.cpython-36.pyc
    │   └── views.cpython-36.pyc
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   ├── __init__.py
    │   └── __pycache__
    │       └── __init__.cpython-36.pyc
    ├── models.py
    ├── tests.py
    └── views.py

 

这是一种简单的做法 不需要用到数据库

setting.py中需要配置3个地方

INSTALLED_APPS = [
    \'django.contrib.admin\',
    \'django.contrib.auth\',
    \'django.contrib.contenttypes\',
    \'django.contrib.sessions\',
    \'django.contrib.messages\',
    \'django.contrib.staticfiles\',
    \'upLoadImg\',
]

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\',
            ],
        },
    },
]

STATIC_URL = \'/static/\'
STATICFILES_DIRS=[os.path.join(BASE_DIR,\'static\')]
MEDIA_ROOT=os.path.join(BASE_DIR,\'static/media\')

 

urls.py

from django.contrib import admin
from django.urls import path
# from myImg.uploadPic import views
from upLoadImg import views

urlpatterns = [
    path(\'admin/\', admin.site.urls),
    path(\'uploadPic/\',views.uploadPic),
    path(\'uploadHandle\',views.uploadHandle)
]

views.py

from django.shortcuts import render
from django.conf import settings
from django.http import HttpRequest,HttpResponse
import os
# Create your views here.
def uploadPic(request):
    return render(request,\'myImg/uploadPic.html\')

def uploadHandle(request):
    if request.method == "POST":
        f1 = request.FILES[\'pic1\']
        fname = os.path.join(settings.MEDIA_ROOT,f1.name)
        with open(fname,\'wb+\') as pic:
            for c in f1.chunks():
                pic.write(c)
        return HttpResponse(\'<img src="/static/media/%s" width="500" height="500" alt="图片无法显示"/>\'%f1.name) # 这里不给width和height会按图片本身分辨率显示

    else:
        return HttpResponse("error")

    #下面这个是直接显示路径
    # pic1 = request.FILES[\'pic1\']
    # picName=os.path.join(settings.MEDIA_ROOT,pic1.name)
    # return HttpResponse(picName)#/Users/liuwei/myImg/static/media/6.png
    #file:///Users/liuwei/myImg/static/media/6.png
   

 upLoadPic.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/uploadHandle" method="post" enctype="multipart/form-data">
    {% csrf_token %}
<input type="file" name="pic1">
    <br>
    <input type="submit" value="上传">
</form>
</body>
</html>

 

那进入myImg/目录 运行

python3 manage.py runserver

在浏览器打开

http://127.0.0.1:8000/uploadPic/

 

 

碰到几个问题:

1. 图片显示不了 那是因为setting .py中没有

STATICFILES_DIRS=[os.path.join(BASE_DIR,\'static\')]

2.上传不了 是因为 要用wb+ , 这个百度就可以了

with open(fname,\'wb+\') as pic:

 

分类:

技术点:

相关文章: