사용자가 업로드한 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
'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 |
댓글