흰 스타렉스에서 내가 내리지

사용자가 media 를 업로드 할 수 있도록 본문

Django

사용자가 media 를 업로드 할 수 있도록

주씨. 2022. 6. 8. 16:12
728x90

settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL = '/media/'

MEDIA_ROOT : 사용자가 업로드 한 미디어가 저장되는 경로

MEDIA_URL : 업로드 된 미디어에 접근할 수 있는 경로

 

 

urls.py

from django.conf.urls.static import static
from django.conf import settings

...
...
...

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

 

models.py

class Blog(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    # photo = models.ImageField(blank=True, null=True, upload_to='blog_photo')
    photo = models.FileField(default="", blank=True, null=True, upload_to='blog_photo')
    date = models.DateTimeField(auto_now_add=True)
    
    
    def __str__(self):
        return self.title

upload_to='폴더 명' : 사용자가 업로드한 미디어들이 media 폴더 안에 blog_photo(없으면 만들어줌) 안에 넣는다.

 

 

forms.py

class BlogModelForm(forms.ModelForm):
    class Meta:
        model = Blog
        fields = '__all__' # Model의 Blog 모델을 전부 입력받을 것이다
        # fields = ['title', 'body']  # 특정 필드만 입력받고 싶을 때

 

 

form_create.html

<h1>django form을 이용한 새 글 작성 페이지</h1>
<form action="{% url 'modelformcreate' %}" method='POST' enctype="multipart/form-data">
  {% csrf_token %}
  <table>
    {{ form.as_table }}
  </table>
  <input type="submit" value='새 글 작성하기'>
</form>

enctype="multipart/form-data" : 폼에 파일을 업로드한다면 무조건 추가해줘야 한다

 

 

views.py

def modelformcreate(request):
    if request.method == 'GET':
        form = BlogModelForm()
    elif request.method == 'POST' or request.method == 'FILES':
        form = BlogModelForm(request.POST, request.FILES)
        if form.is_valid(): # 폼 데이터를 자동으로 유효성 검사를 해줌
            form.save()
            return redirect('home')
    return render(request, 'form_create.html', {'form': form})

 

 

 

detail.html

<h1>제목</h1>
{{ blog_detail.title }}

<h2>날짜</h2>
{{ blog_detail.date }}

<h3>본문</h3>
{{ blog_detail.body }}

{% if blog_detail.photo %}
  <img src="{{ blog_detail.photo.url }}" alt="">
{% endif %}

 

'Django' 카테고리의 다른 글

회원가입, 로그인, 로그아웃  (0) 2022.06.08
댓글  (0) 2022.06.08
게시글 detail 페이지 구현  (0) 2022.06.08
DB에 담긴 데이터들을 html에 띄워보자  (0) 2022.06.07
modelForm  (0) 2022.06.07