django在后台上传图片,通过前端上传图片

在后台上传图片

  • 先安装Pillow

    pip3 install -i https://pypi.douban.com/simple/ Pillow
    
  • 在setting里面进行配置

    MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace("\\", "/")
    MEDIA_URL = '/media/'
    
    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',
                    'django.template.context_processors.media'
                ],
            },
        },
    ]
    
  • 模型类设置ImageField字段

    #y 表示年份的后两位 Y表示年份的全部 m表示月份  d表示今天的
        cover = models.ImageField(verbose_name='封面', upload_to='news/%y/%m/%d')
    
  • 配置主url

    from django.conf.urls.static import static
    from django.conf import settings
    urlpatterns = [
                      path('admin/', admin.site.urls),
                  ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    
  • 模板写法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {% for article in articles %}
        <h1>{{ article.title }}</h1>
        <img src="{{ MEDIA_URL }}{{ article.cover }}" alt="">
    {% endfor %}
    </body>
    </html>
    

通过前端上传图片

  • 先安装Pillow

    pip3 install -i https://pypi.douban.com/simple/ Pillow
    
  • 在setting里面进行配置

    MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace("\\", "/")
    MEDIA_URL = '/media/'
    
    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',
                    'django.template.context_processors.media'
                ],
            },
        },
    ]
    
  • 在from表单里面进行配置

    <form method="post" action="/upload/" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="pic"/><br>
    <input type="submit" value="上传">
    </form>
    
  • 在view里面进行配置

    def upload(request):
    file = request.FILES.get('pic')
    media_root = settings.MEDIA_ROOT
    path = 'news/{}/{}/{}/'.format(datetime.now().year, datetime.now().month, datetime.now().day)
    full_path = media_root + '/' + path
    print(full_path)
    if not os.path.exists(full_path):
        os.makedirs(full_path)
    with open(full_path + file.name, 'wb') as pic:
        for c in file.chunks():
            pic.write(c)
    Article.objects.create(title='ces', cover=path + file.name).save()
    
  • 在主路由进行配置

    from django.conf.urls.static import static
    from django.conf import settings
    urlpatterns = [
                      path('admin/', admin.site.urls),
                  ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    
  • 在前端显示上传的图片

    	<!DOCTYPE html>
    	<html lang="en">
    	<head>
    	    <meta charset="UTF-8">
    	    <title>Title</title>
    	</head>
    	<body>
    	{% for article in articles %}
    	    <h1>{{ article.title }}</h1>
    	    <img src="{{ MEDIA_URL }}{{ article.cover }}" alt="">
    	{% endfor %}
    	</body>
    	</html>
    	```
    
    
发布了32 篇原创文章 · 获赞 2 · 访问量 228

猜你喜欢

转载自blog.csdn.net/qq_33759361/article/details/104959425
今日推荐