django의 static 파일 구분!
static : 웹서비스를 위해, 개발자가 준비해두는 파일
media : 웹서비스 이용자들이 업로드하는 파일
STATIC
django 에서 정적파일 VS 동적파일
정적파일 : 미리 서버에 저장되어 있는 파일
서버에 저장된 그대로를 서비스 해주는 파일
예) 애플의 핸드폰 화면들은 이미 서버에 등록이 되어있는 것
동적파일: 서버의 데이터들이 어느정도 가공된 다음 보여지는 파일 ( 상황에 따라 달라질 수 있음)
정적파일 - Static 개발자가 서버를 개발할 때 미리 넣어놓은 정적파일(img, js, css)
- media 사용자가 업로드 할 수 있는 파일 : instagram 처럼, 사진,파일등을 업로드 하는 것
blog라는 앱에 static이라는 폴더를 생성한다. 그안에 정적 파일인 이미지파일을 넣어준다
settings.py안에
맨 위에 import os를 해주고
#스태틱파일들을 모아주는 방법!
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'blog' , 'static')
]
#현재 static 파일들이 어디에 있는지 경로를 써주는 것
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
#static 파일을 어디에 모을건지
$python manage.py collectstatic
#스태틱 파일들을 모으기 위해서 명령어
왜 정적 파일들을 모아주는 가?
실서버를 배포하기 위해 정적파일들을 편하게 관리하려고
template/ *.html 파일 안에서 static폴더 안의 파일들을 띄우는 방법
html 파일 안의 main태그 위에 넣는 것
{% load staticfiles %}
<img src="{% static 'siba.jpg' %}" alt="">
Media
사용자가 사진을 업로드 시켜서 , 서버가 저장,
사용자가 그 사진을 보여달라고 함 (사진의 원본이 아님X, 사진의 모양(url)만 가져다줄 뿐)
웹 통신 방식이 url이기 때문이다. 사진의 경로를 가져다주는 것
settings.py에
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#이용자가 업로드한 파일을 모으는 곳
MEDIA_URL = '/media/'
#이용자에게 사진을 보여줄 때, url의 구성요소,media파일의 url을 설정한것과 같다
lionproject의 urls.py에
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('',homePage,name="homePage"),
path('homemedia/',home,name="home"),
path('staticBlog/', include('staticBlog.urls')),
path('mediaformBlog/', include('mediaformBlog.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
#이거를 통해 올린 이미지를 읽어올 수 있음
models.py에
class mediaformBlog(models.Model):
subject = models.CharField(max_length = 200)
drafter = models.CharField(max_length = 100)
date = models.DateTimeField()
textBody = models.TextField()
picture = models.ImageField(upload_to = "mediaformBlog/", blank = True, null = True) #image
#사진을 안올릴 수도 있어서, blank와 null을 모두 true처리
upload_to 는 업로듣된 사진들을 mediaformBlog/에 넣어주라는 의미
--정보를 하나 추가함으로써 그전 데이터와 맞지 않게 되므로 오류가 나게됨! 그전의 데이터들을 모두 삭제한다.
python manage.py makemigrations / python manage.py migrate
$python manage.py pillow
$pip install pillow
wayhome25.github.io/django/2017/03/14/django-07-kilogram-04-photo-model/
django 07. 세번째 장고앱 04. 사진 업로드 모델 생성 / MEDIA_URL 설정 · 초보몽키의 개발공부로그
wayhome25.github.io
python manage.py makemigrations
을 함으로써 blog\migrations\0001_initial.py이 생성이됨
python manage.py migrate
그 전의 있던 django파일들을 지움으로써 createsuperuser도 다시 생성해줘야함
python manage.py createsuperuser
views.py
model을 연결해서 데이터를 내려받아야한다!
from .models import Portfolio
# Create your views here.
def portfolio(request):
portfolios = Portfolio.objects
return render(request, 'portfolio/portfolio.html', {'portfolios': portfolios})
FORM
:장고에서 입력공간을 준다
-클라이언트가 데이터베이스 형식에 맞게끔(model을 기반으로) 입력을 받을 수 있도록 함-
-장고에서 제공해주는 FORM : forms.py 로 객체지향적으로 클래스로 만들 수 있도록 함
forms.py를 쓰면?
: 이미지 파일을 받느라고 태그, 관리를 계속 해줌.
데이터베이스의 모델이 바뀔 때마다, 하나하나 바꾸지 않아도 됨. 유효성 검사도 더 편하게 할 수 있음
앱에 form.py를 만든다
from django import forms
from .models import [앱이름]
class BlogForm(forms.ModelForm):
class Meta: #이름표와 같은 역할 : Blog모델에 이러한 fileds를 연결시키는 역할 제공
model = mediaformBlog
--입력받고 싶은 model의 속성들만 fields에 작성한다.
fields = ['subject', 'drafter', 'textBody', 'picture']
#date는 작성된 시간을 자동으로 넣어주는 기능이여서 입력을 받는 것이 아님
그리고 views.py에
from .forms import BlogForm
def newMedia(request):
Myform = BlogForm()
return render(request,'newMedia.html', {'form': Myform})
newMedia.html안에서는
<form action="{%url 'createMedia'%}" method="post" enctype="multipart/form-data">
<!-- 메소드 post를 사용할 때는 csrf토큰을 보내줌
csrf공격이 아니라는 것을 알려주는 token -->
{%csrf_token%}
<table>
{{form.as_table}} <!--{{form.as_p}} : label태그로 감싸진걸 p로 감싸도록 한다-->
</table>
<br>
<button type="submit" class="btn btn-outline-warning">submit</button>
</form>
views.py안에
POST방식으로 요청이 들어올 경우 : 수행하는것, 서버의 값이나 상태를 바꿀 수 있음
form에 BlogPost객체를 만들고, 받아온 데이터를 넣어준다.
is_valid() 함수는 form으로 입력 받은 값들이 유효한지 판단해주는 함수이다
commit=False를 넣어주면 , 저장하지 않고 form데이터만 가져올 수 있다.
날짜 시간을 입력받기 위해서 !
GET방식으로 요청이 들어올 경우 : 정보를 가져오는 것, 서버에서 데이터를 가져와서 보여주는 것
BlogPost클래스 객체를 만들어서 변수에 넣어준다. 그리고 html을 띄울때 딕셔너리 자료형으로 넣어 전달한다.
'기타 > Django & Web' 카테고리의 다른 글
[django] django-crispy-form 설치 및 사용방법 (0) | 2021.05.16 |
---|---|
[Django - Thumbnail] 섬네일 지정하기 (0) | 2021.05.11 |
Django정리 (0) | 2021.04.27 |
Django정리 (0) | 2021.04.13 |
깃 사용법 (0) | 2021.04.13 |