본문 바로가기
Back-end/Django

[Django] Media

by 안녕주 2021. 7. 19.

사용자가 업로드한 Static Media

 

1. settings.py에 코드 추가

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#이용바가 업로드한 파일을 모으는 곳
MEDIA_URL = '/media/'

2. lionproject/urls.py에 코드 추가

from django.contrib import admin
from django.urls import path, include 
from blog.views import home
from django.conf import settings  #setting.py를 뜻하는게 아니다.
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name="name"),
    path('blog/', include('blog.urls'))
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
#static을 병렬적으로 더해주는 형태

3. models.py에 이미지필드 생성

from django.db import models

#table의 형식 만들기
class Blog(models.Model): 
    title = models.CharField(max_length=200)
    writer = models.CharField(max_length=100)
    pub_date = models.DateTimeField()
    body = models.TextField()
    image = models.ImageField(upload_to="blog/", blank=True, null=True)
    #upload_to 속성은 업로드할 폴더를 지정 하는 것이다
    #사진을 올리지 않아도 OK

    def __str__(self):
        return self.title

    def summary(self):
        return self.body[:100] #100인덱스까지 슬라이싱

4. table에 변경사항이 생기면 기존에 있던 데이터들을 다 삭제 해야한다.

- blog/migrations/initial, blog/migrations/__pycache__/initial, db.sqlite3 파일을 삭제한다

 

5. ImageField를 사용하려면 pillow가 무조건 있어야한다.

pip install pillow

6. models.py를 변경 했으니 아래의 명령어들을 입력해야한다.

python manage.py makemigrations
python manage.py migrate

7. superuser생성

python manage.py createsuperuser

8. admin페이지로 이동해 파일 업로드 column이 생성되었는지 확인


웹페이지에 사진 업로드 하기

1. news.html 수정

{% extends 'base.html' %}

{% block content %}


<h1>Write Your Blog</h1>


<form action="{%url 'create' %}" method="post" enctype="multipart/form-data"> 
    {%csrf_token%}
    <p>제목 : <input type="text" name="title"></p>
    <p>작성자 : <input type="text" name="writer"></p>
    <p>사진 : <input type="file" name="image"></p>
    본문 :  <textarea name="body" id="" cols="30" rows="10"></textarea>
    <button type="submit">Submit</button>
</form>

{% endblock %}

2. views.py의 create함수  수정

def create(request):
    new_blog = Blog()
    new_blog.title = request.POST['title']
    new_blog.writer = request.POST['writer']
    new_blog.body = request.POST['body']
    new_blog.pub_date = timezone.now()
    new_blog.image = request.FILES['image']
    new_blog.save() 
    return redirect('detail', new_blog.id)

3. detail.html 수정

{% extends 'base.html' %}

{% block content %}

    <h1>{{blog.title}}</h1> <br>
    <div>
        작성자 : {{blog.writer}} <br>
        날짜 : {{blog.pub_date}} <br>
    </div>
    <hr>
    {% if blog.image %}
    <p><img src="{{blog.image.url}}" alt=""></p>
    {% endif %}
    <p>{{blog.body}}</p>
    <a href="{% url 'edit' blog.id %}">수정하기</a>
    <a href="{% url 'delete' blog.id %}">삭제하기</a>


{% endblock %}

4. runserver

         

new.html
detail.html - 사진이 너무 커서 잘라서 올렸다! 제대로 올라감!

'Back-end > Django' 카테고리의 다른 글

[Django] User 확장과 인증(이론)  (0) 2021.07.20
[Django] Form  (0) 2021.07.19
[Django] Static  (0) 2021.07.19
[Django] Template 상속  (0) 2021.07.19
[Django] CRUD - Delete  (0) 2021.07.19

댓글