<요약> 

 

  1. Static과 media는 어떤차이가 있는가?
  2. media 설정하기 
  • settings.py에서 media 설정
  • url설정 
  •  외부에서 받을 데이터 모델 class 만들어주기 
  • admin.py에서 만든 class 등록
  • 모든 class의 내용을 보여주라는 view 작성
  • html에  화면 띄우기 (templates 작성 ) 

 

 

 

< 배운것> 

 

1. static 과 media 

2. django에서 외부와 통신하는 방법은 URL 

 

 

 


 

 

이전 글에  Django에서 처리하는 데이터의 종류는 두가지가 있다고 했습니다. ( 정적파일,동적파일)

그리고 이중 정적파일은 준비해둔 파일을 보여주는 static파일과 외부에서 사용자가 업로드하는 media파일로 나눌 수 있습니다. 

이번에는 media파일을 다루어 보겠습니다. 

 

 

 

media 파일이란  
프로젝트에 업로드 되는파일을 말합니다. 

 

 

media파일을 다루기 위해서 해야할 것이 있습니다. 

1. 업로드될 파일을 저장할 디렉토리경로 지정해주기

2. url 지정 ( 바로 밑에서 설명.) 

 

Static vs Media은 어떤 차이가 있는가? 

Static

- 요청하면 준비해둔 파일
해당 파일이 어떤 파일인지 알아 내기 위하여 외부와 통신 X


Media 

-프로젝트 외부와의 통신을 통해서 얻게되는 파일. 
해당 파일이 어떤 파일인지 알아 내기 위하여 외부와 통신 O

 

 

< 장고는 외부와 통신할 때 URL을 통해서 통신한다. >

 

Django와 외부의 통신망 url이기 때문에 Media파일을 사용하기 위해 디렉토리 경로뿐만 아니라 url도 설정해줘야 한다. 

 

 

<정적파일을 다룰 때 Settings.py에서 설정해 줘야 하는 것들 >

 

정적파일의 종류인 static과 media는 다음과 같은 차이를 보입니다.

Static Meida
Static 파일이 어디있고
STATICFILES_DIRS = [...]
Media 파일이 어느 url을 타고
MEDIA_URL
어디로 모을지
STATIC_ROOT
어디로 모을 것인지
MEDIA_ROOT

 

 

 

 

이제 media를 설정해보자. 

 

 


media설정 하는 과정은 다음과 같다. 

 

  1. settings.py에서 media 설정
  2. url설정 
  3.  외부에서 받을 데이터 모델 class 만들어주기 
  4. admin.py에서 만든 class 등록
  5. 모든 class의 내용을 보여주라는 view 작성
  6. html에  화면 띄우기 

 

 

1. settings.py에서 media 설정

 

django 프로젝트 폴더의 settings.py에서 맨 밑에 다음 코드를 추가한다. 

 

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

MEDIA_URL = '/media/'

 

 

2. url.py에서 path 설정

 

static 관련 내용을 import하고 맨 마지막에 static 관련한 한줄을 추가해줍니다. 그냥 이렇게 해야 올린 이미지를 읽어올수 있구나 생각하면 됩니다.

 

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blogapp.views.home, name="home"),
    path('blog/<int:blog_id>', blogapp.views.detail, name="detail"),
    path('blog/new', blogapp.views.new, name="new"),
    path('blog/create', blogapp.views.create, name="create"),
    path('portfolio', portfolio.views.portfolio, name="portfolio"),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

 

3. 외부에서 받을 데이터 모델 class 만들어주기 

 

 

외부에서 업로드 요청할 파일의 Class모델을 만들어 줍니다.

모델에서 받아올 정보는 이미지 파일과 텍스트 파일입니다. 모델을 만들어 봅시다.

 

class Portfolio(models.Model):
    title = models.CharField(max_length=255)
    image = models.ImageField(upload_to='images/')
    description = models.CharField(max_length=500)

    def __str__(self):
        return self.title

image를 살펴보면 upload_to='images/'라는 내용이 있는데 이부분이 업로드된 이미지들을 images 폴더안에 넣으라는 의미입니다

 

<Tip>

DB 안에 데이터들을 어떻게 구성할지 만드는 설계도 같은 겁니다. 여기에 어떤 방식으로 적어야하는지는 django documentation에 잘 나와있습니다. 원하는 모델 구성이 있을때 찾아보며 작성하면 됩니다.

 

https://docs.djangoproject.com/ko/2.1/topics/db/models/

 

모델 | Django 문서 | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

이미지 파일을 다루기 위해서는 pillow를 설치 해야 합니다. 

 

pip install Pillow

 

 

모델을 만들었으니 migrate 해야합니다. 

python manage.py makemigrations
python manage.py migrate

 

 

 

4. admin.py에서 만든 class 등록

 

model을 만들었으니 admin사이트에서 보여주기 위해서 admin.py 에서 class를 등록해줍니다.

portfolio앱 안에 있는admin.py에서 

from .models import Portfolio

admin.site.register(Portfolio)

 

 

5. 모든 class의 내용을 보여주라는 view 작성

view를 수정해봅시다. 기존 portfoilio.html만 보여주었던 화면과 달리 model을 연결해 데이터를 받아야합니다.

 

from .models import Portfolio

def portfolio(request):
    portfolios = Portfolio.objects

    return render(request, "portfolio.html", {
        "portfolios": portfolios,
    })

 

6. html에  화면 띄우기 

마지막으로 portfolio.html에 이미지 파일을 띄어 봅시다. 

다음과 같이 portfolio.html을 수정해줍니다. 

 

{% for portfolio in portfolios.all %}
<div class="col-lg-6 portfolio-item">
    <div class="card h-100">
        <a href="#"><img class="card-img-top" src="{{ portfolio.image.url }}" alt=""></a>
        <div class="card-body">
            <h4 class="card-title">
                <a href="#"> {{ portfolio.title }} </a>
            </h4>
            <p class="card-text"> {{ portfolio.description }} </p>
        </div>
    </div>
</div>
{% endfor %}

 

이제 실행시키고 admin사이트에 접속해 이미지를 업로드해봅시다. 

 

이렇게 나오면 성공

 

<요약> 

  1. 파일을 보여주는 portfolio app 만들기
  2.  장고에서 다룰 수 있는 파일에 종류 설명
  3.  만든 App에서 static 파일을 다뤄보기 

 

 

<배운것들> 

  1. 정적파일과 동적파일  (static, dynamic)
  2. 정적파일의 종류 (static, media)
  3. 정적파일인 static 파일 다루기

 


 

 Static파일이란 웹 사이트 구성요소 중 Image, CSS, Script파일과 같이 그 내용이 고정되어 응답을 할 때 별도의 처리 없이 파일 내용을 그대로 보내주면 되는 파일을 의미합니다

 

일단 Static파일을 다루기 위해 portfolio라는 이름의 앱을 새로 만들고 설명하겠습니다.

 

 

 

 

1. App 새로 만들기 

 

1.준비된 이미지 파일을 올리는  App을 만들어보자 . App이름은 portfolio. 

python manage.py startapp portfolio

 

 

2. app 을 만들었으니  django프로젝트에서 App을 만들었다는 것을  알려줘야한다.  s

장고프로젝트에 settings.py에서 INSTALLED_APPS 부분을 추가한 모습

 

 

2. Templates 만들기 

 

 static 파일을 보여주기 위해 portfolio 앱에서 Templates 폴더를 만들어주자. 이후 portfolio.html 이라는 파일을 만들어준다.

새로 만든 portfolio 앱에 templates폴더만들고 html 만들고 ..

 

 

3. view 만들기

 

portfolio 앱안에 view.py를 엽니다.  portfolio.html 을 열어주는 함수를 만들어 줍니다. 

 

 

from django.shortcuts import render
from .models import Portfolio
# Create your views here.
def portfolio(request):
    portfolios = Portfolio.objects
    return render(request, 'portfolio.html', {'portfolios' : portfolios})

 

다른 App의 view.py와 혼동하지 말자.

 

 

4. url 수정하기 

 

url을 만들고 실행해봅니다.

 

path('portfolio/', portfolio.views.portfolio, name='portfolio'),

 

장고를 실행시키고, url에 접속해보면 , 

 

 

제대로 연결된것을 알 수 있다. 

 

 


 

 

 

2. django에서 다루는 파일의 종류

 

Django에서 다루는 파일의 종류는 두가지가 있다. 

 

1. Static File (정적 파일) : 미리 서버에 저장되어 있는 파일 

-서버에 저장한 파일을 그대로를 서비스하는  파일

 

2. Dynamic File (동적 파일) : 서버의 데이터가 가공되고 나서 보여주는 파일 

- 언제, 어디서, 누가, 어떻게 요청하나에 따라 보여지는게 다를 수 있는 파일

 

 

 

근데 정적파일은 두가지의 종류가 있다. 

 

1. 프로젝트 입장에서 뭔지 아는파일

- 개발할 때 미리 준비해둔 파일 " static"

2 웹서비스 이용자들이 업로드 하는 파일 "media"

 

우리는 정적파일 중에서 static 파일을 다뤄 보도록 하자 . 

 


 

 

 

3. 만든 App에서 static 파일을 다뤄보기 

 

 

< 알아두기 >
Django가 static 파일을 처리하는 과정은 다음과 같다.

 

1. Static 파일의 위치찾기 

2. Static 파일을 한곳에 모으기

 

우리는 static파일인 이미지파일을 portfolio.html에 첨부해 보자.

 

 

static 파일을 처리하는 방법은 다음과 같다. 

 

  1. Static 파일들을 담을 폴더 만들기
    • (App폴더 내부에) Static 폴더 생성 및 파일 저장
  2. Static 파일의 위치 알려주기
    • settings.py에서 알려주기
  3. Static 파일을 모으기
    • $ python manage.py collectstatic (명령어)

 

1 . Static 파일들을 담을 폴더 만들기 

 

 

 

 

 

2. Static 파일의 위치 알려주기

  • settings.py에서  맨밑에 다음과 같이 적는다. 

 

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'portfolio', 'static')
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

 

STATICFILES_DIRS static파일이 어디 있는지 알려주는 변수
STATIC_ROOT static파일들이 어디로 모일 것인지 알려주는 변수

 

 

 

3. Static 파일을 모으기

 

터미널에 다음 명령어를 입력하자. 

python manage.py collectstatic

 

 

 

portfolio App의  static 폴더에 첨부할 이미지 파일을  넣는다 .
그리고 portfolio.html에서 최상단에 다음 코드를 추가한다.

 

{% load staticfiles %}

 

 

static 폴더안에 이미지파일을 첨부하기 위해 다음과 같이 <img> 태그에 경로를 적는다. 

 

<a href="#"><img class="card-img-top" src="{% static 'first_logo.png' %}" alt=""></a>

 

 

우리가 admin에서 쓴 글은 홈화면에 차례로 보여지게 됩다. 

만약  1000자 이상 긴글이 많으면 홈화면은 어떻게 될까?

 

 

 

 

 

우리는 home.html에서 보여지는 내용을 줄이고,

more 버튼을 눌렀을  때 자세한 내용을 보여주는 detail.html을 띄우자. 

 

 

 

 

 

< 요약 >

  1. template 추가하기
  2. urlConfig 만들기
  3. view 만들기
  4. model 수정하기
  5. template 수정하기 

 

< 배운것 > 

 

get_object_or_404

PK

Path Converter

 

 

 

1. template 추가하기

 

detail페이지를 새로 만들어야 한다. detail.html 이름으로 새로 만들자. 

 

 

 

2. url Config 만들기

 

urls.py에 새로운 패턴을 만들자 . 

  path('blog/<int:blog_id>', blog.views.detail, name='detail'),

 

 

<int blog_id> 라는 못보던게 있다.

 

만약 우리가 쓴 글이 100개 200개라면 detail페이지도 100개 ,200개 만들어야 할까? 
django는 각 글마다 id를 매겨서 알아서 디자인 하는 기능을 가지고 있다. 

이것을 가능하게 하는것이  blog/<int:blog_id> , 이름으로는  path converter라 한다.

여기서 int:blog_id를 보면,  각 글마다 int타입의 id를 부여해서 디자인하라 라고 보면 된다. 

 

 

urls.py에서 detail이라는 함수에 blog_id라는 인자를 넘겼으니 view.py의 detail함수는 blog_id를 전달받게 될 것이다.

이제 view를 작성해서 어떻게 blog_id를 받아서 다루는지 알아보자 

 

* path converter란???

 

우리가 아까 적어줬던 <int:blog_id>같은 것들을 path-converter라고 합니다.

장고에서 여러 객체들을 다루는 계층적 url이 필요할 경우에 사용하며, <type:name>와 같은 모양입니다.

'지정한 converter type의 name변수를 view 함수로 넘겨라' 하고 정리할 수 있겠네요.

converter의 다양한 타입에 대해 궁금하시면 구글에 검색해보시는 걸 추천드립니다!

 

 

3. view 만들기

 

urls.py에서  받은 PK를 어떻게 처리해서 템플릿에 연결하는지 생각하면서 적어보자.

 

 

from django.shortcuts import render, get_object_or_404

from .models import Blog
# Create your views here.


def home(request):
    blogs = Blog.objects
    return render(request, 'blog/home.html', {'blogs': blogs})


def detail(request, blog_id):
    blog_detail = get_object_or_404(Blog, pk=blog_id)
    return render(request, 'blog/detail.html', {'blog': blog_detail})

 

 

위의 detail함수는 request와 blog_id를 함께 받아 해당 데이터를 넘겨주는 기능을 한다. 

먼저 맨위에  render뒤에 콤마찍고 get_object_or_404를 잊지말고 적어주자. 

 

get_object_or_404 란?


object를 가져오고 없으면 404메세지를 띄울 수 있는 함수.사용방법은 get_object_or_404 ( object명 , PK(primary key

 

PK란?


모델에서 찍어낸 수많은 객체들을 구분할 수 있는 구분자. 서류철의 라벨처럼 데이터를 구분 지을 수 있는 이름표라고 이해하면 쉽다.  

 

 

 

urls.py에서 받아달라고 인자를 넘겼고  detail함수가 blog_id를 받아오는 것을 확인 할 수 있다. . view는 urls.py에 적었던 pk를 식별합니다. 그렇기 때문에 urls.py와  pk 변수명이 다르면 오류가 뜬다.

우리는 이제 모델에서 id기준으로 데이터를 가져와, 있으면 보여주고 없으면 404 에러를 띄워wns다.

(id값은 만든적이 없다고 걱정하지 않아도 됩니다. django가 기본으로 만들어줍니다.)

 

 

4. model 수정하기

 

이제 model에서 body부분을 100자정도만 나오게끔 하는 함수를  추가하자. 

 

def summary(self):
    return self.body[:100]

 

 

 

 

 

5. Template 수정하기

 

이제 다끝났다 .

먼저 home.html 에서는 새로 만든 100자 제한 함수를 띄우게하고  옆에 <a> 태그로 more... 을 만들고 url은 detail.html 연결하게 만든다. 

detail.html 100자 제한 함수 (summary) 가 아닌 (body)를 띄어 주면 된다. 

 

먼저 home.html를 수정해준다. 

 

 

그리고 detail.html 을 수정한다. 

 

 

 

 

이제 서버를 실행시키고 확인해보면 

 

홈화면에 등록된 글이 너무 길면  일정하게 짜르고  more... 버튼이 나타난다. 

 

 

 

more.....  버튼을 누르면 짤렸던 긴글이 나오게 된다. 

 

< 요약 >

 

admin페이지에서 글쓰기 하지 말고, 글쓰는 페이지 만듭시다.

 

  1. template 만들기 ( 게시글 등록 화면 만들기)
  2. View 만들기 & url설정하기 & template에 링크 넣기
  3. 제출하기 버튼 작동하게 하기

  4. redirect 와 render  차이?

< 배운것 >
 

1. rediract

2. template에서 함수를 실행하려면 url도 만들어야 한다.
3. redirect 와 render  차이? 

 

 

 

 


 

1. template 만들기 ( 게시글 등록 화면 만들기) 

 

 

 

 

 

<h1>글쓰기 페이지 입니다</h1>

<form action="">
  <h4>제목: </h4>
  <input type="text" name="title">
  <br>
  <br>
  <h4>본문: </h4>
  <textarea cols=40 rows=10 name="body"></textarea>
  <br>
  <br>
  <input class="btn btn-dark" type="submit" value="제출하기">
</form>

 

View 만들기 & url설정하기 & template에 링크 넣기

 

 

 

 

 

 

def new(request):
        return render(request, 'new.html')

 

그리고  urls.py에서  만든 함수를 연결해주자.

 

path('blog/new/', blog.views.new, name='new')

 

 

그리고 제대로 화면이 나오는지 확인해보자.

 

python manage.py runserver

 

 

http://127.0.0.1:8000/new/

다음 주소로 입력했을때 화면이 잘 보이는 지 확인한 모습이다. 

 

 

3. 제출하기 버튼 작동하게 하기

 

위에 글쓰기 페이지를 보면 제출하기가 구현되어 있다. 이 기능을 작동하게 만들어 보자.

그럼 우리가 '제출하기' 버튼을 누르면 어떤 기능이 되야하는지 생각해봐야하고 그것들을 개발해야한다.

 

기능은 다음과 같다.


1.글을 적고 '제출하기'를 누르면 우리가 적은 데이터는 DB에 가서 저장이 되고,

2.home.html 에 보여줘야 한다. 

여기서 우리는 create 함수를 만들어서 new.html에 작성한 파일을 home.html에 보내게 할 것이다. 

create함수는 view.py에서 작성하지만, create함수를  template에 실행하려면 URL을 따로 만들어야한다.

 

 

 

우선  new.html 에서 제출하기를 누르면 create 함수를 실행시키는 코드르 넣자. 

<form action="{% url 'create' %}">

 

사진으로 보면 이렇게 된다.

 


이제 데이터를 전달하는  함수를 작성해줘야한다. 
views.py에서 작성할 함수는 다음과 같다.



 입력받은 내용을 DB에 넣어주는 함수  
이 함수명은  create 이고 이 함수는  html을 띄어주는것이 아닌 데이터만 처리하는 함수이다. 

 

view.py를 다음과 같이 추가 해준다. 

from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone

from .models import Blog
# Create your views here.

def create(request):
    blog = Blog()
    blog.title = request.GET['title']
    blog.body = request.GET['body']
    blog.pub_date = timezone.datetime.now()
    blog.save()
    return redirect('/blog/' + str(blog.id))

 

 

 

사진으로 보면



.create라는 함수는 blog를 불러와서 우리가 모델에 정의했던 데이터 모양대로 하나하나 넣어주는 작업이다.

<코드 설명> 

  • request.GET['title']은 new.html 파일에 form태그 안에 있는 녀석입니다. 코드를 확인해 보면 name="title"이라고 적혀있을텐데 그래서 GET[] 안에 'title'이 들어가는 겁니다. blog.body도 동일한 논리입니다.
  • blog.pub_date 의 경우는 입력한 시간이 자동으로 넘어가게끔 코드를 구성했습니다. 이때 timezone이라는 패키지를 사용해야해서 두번째 줄에 보면 import를 해주는 겁니다.
  • redirect 는 요청을 처리하고 보여주는 페이지 입니다. render가 '요청이 들어오면 이 html 파일을 보여줘 라는 녀석'이였다면, redirect는 '요청을 들어오면 저쪽 url로 보내버려' 하는 녀석입니다.


url을 넣어주자. 

 

path('blog/create/', blog.views.create, name='create'),

 


path를 한 줄 추가한해서  creat함수를 new.html에서 사용하게 만들어주자 .  이 url은  html 페이지를 띄우는 것이 아니고 단순히  create함수를 호출하라는 뜻이다. 따라서 create.html은 없다. (path의 갯수가 html 페이지의 갯수와 비례하지 않는다는 사실을 기억하자.)

 

 

 

 

 

 

 


4. redirect, render 차이점

 

render , redirect는 둘다 띄우라는 함수다.

용도 겹치지만, 인자에 따라서 render , redirect 상황이 달라진다. 

 

1.redirect 함수는 뒤에 url을 받는다 .

ex. return rediract (' https://google.com ') 

 

2. render 함수는 파이썬 변수를 키값으로 받아서 html에서 지지고 볶을때 사용하한다.

ex. return render(request, 'home.html', {'blogs' : blogs}

 

 

정리하자면.

redirct : 마지막으로 url을 실행할 때 씀

render :  template에서 템플릿함수를 쓰고 싶을때 씀

 

< 요약 > 


       글쓰기 폼을 만들고 , view로 작성한 글들을 처리해서 , template에 보여주자. 

 

  1. 프로젝트 준비하기 ( 폴더 만들기,가상환경 설치)
  2. 프로젝트 시작하기 ( project 시작하기, App만들기)
  3. template만들기  
  4. view 만들기
  5. url 만들어서 연결하기
  6. model 만들고 admin에 model 등록하기 
  7. admin계정만들어서 model 글작성하기
  8. view로 model 데이터 가져오기
  9. 가져온 데이터를 template에서 보여주기

 

< 배운것 > 

  1. model에 데이터를 view로가져와 처리해서 template에 보여주기
  2. 템플릿 언어

 

1. 프로젝트 준비하고 

 

폴더 만들어서 vsCode에 들어간다. 터미널킨다. 

 

1. 가상환경을 만들고 실행해준다 ( 가상환경 이름은 myvenv로 지었다.)

 

virtualenv myvenv 
source myvenv/bin/activate 		 

 

 

2. 장고설치 

 

pip install django		

 

2. 프로젝트 시작하기 

 

1. 프로젝트 시작하기 (프로젝트 명은 blogproject)

 

 

django-admin startproject blogproject

 

 

 

2. 만들어진 프로젝트에 경로 들어가기 (manage.py 가 있는곳에서만  App을 만들 수 있다.)

 

 

cd blogproject 

 

 

 


3. App 만들어주기 (App 이름은 blog)

 

 

python manage.py startapp blog

 

4. 만든 App을 프로젝트에 연결시키기 

- blogproject안에 setting.py에서  INSTALLED_APPS 안에 추가하기

 

 

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]

#App 이름 넣고 ' , ' 넣으면 됨 

 

3. templates 만들기

 

1. App(blog)폴더안에 templates이름으로 폴더를 만든다. 
2. templates 폴더안에 'home.html'를만들고  밑에 내용을 넣는다. 

 

<h1> 블로그페이지 입니다. </h1>

 

4. view 만들기 

 

데이터를 처리하는 역할인 view을 건드리자. 

bApp(blog)안의 views.py파일을 열어 요청이 들어오면 home.html파일을 여는 함수를 만들자. 

 

 

5. URL 만들어서 연결하기 

 

view를 만들었으니 URL을 만들어줘서  화면에 띄어보자. 

 

1. 프로젝트 폴더에서 urls.py 찾아 작성한다. 

 

2. 화면을 띄어서 제대로 작성했는지 확인해본다. 

 

다 저장하고 터미널에서  입력하자.

 

python manage.py runserver

그러면 .. 

app 이 잘 연결되서 실행된 모습

 

6.  블로그에 사용할 글쓰기 model 만들고 admin에 등록하기.

 

 

블로그를 만들기 위해 글쓰기기능을구현한다. 

1. models.py 에서 글쓰기 폼을 만들기
2. admin.py 에서 만든 폼 admin페이지에 등록하기
3. migration


를 하면된다.. 
 

1. models.py 에서 글쓰기 폼을 만들기

 

글쓰기 기능은 model에서 글쓰기 폼을 만들어 구현할 수 있다. 

  • 제목
  • 본문
  • 작성일자

    로 구성된 폼을  App(blog) 폴더에 있는  models.py 에서 작성하자.

 

 

2. admin.py 에서 만든 폼 admin페이지에 등록하기

우리가 만든 글쓰기 model을 admin 페이지에 나오게 하려면 admin.py에서 등록을 해줘야한다. 

from django.contrib import admin
from .models import Blog
# Register your models here.


admin.site.register(Blog)

 

 

3.migration

 

Djaango는 python으로 작동하는 프레임워크지만 DB는 그렇지 않다. 그래서 python 코드를 DB에서 알아 듣게끔 하는 작업을 해줘야 한다.  이 작업은 2개의 명령어를 순서대로 입력해 주면 된다. 

python manage.py makemigrations
python manage.py migrate


python manage.py makemigrations : DB가 파이썬 코드를 알아듣게 해줘 (모델이 뭐 바뀐게 없나 찾는 행위)
python manage.py migrate : 바뀐 것을 적용해줘

 

 

 

7. admin계정만들어서 model 글작성하기

 

 

admin 페이지에 접속하려면 admin 계정을 만들어 줘야 한다.



admin 계정을 만드는 명령어는 

 

 

python manage.py createsuperuser

 

 

이제  127.0.0.1/admin으로 접속해 방금 만든 계정으로 로그인 해보면.

위 사진 처럼 우리가 만든 Blog라는 글쓰기 폼이 나오는것을 볼 수 있다. 
add를 누르고 글을 만들어 보자.

 

 

8. view로 model 데이터 가져오기

 

model(글쓰기 폼)도 만들었고, admin페이지에서 model(글쓰기 폼)를 이용해 글을 만들었다면 
데이터를 보여줘야 한다. 보여주는 부분은 templates. 마지막 9번에서 설명한다.

 

 

view.py에서 수정 해주자. 

 

 

 

 

추가된 부분만 살펴보자면 views.py파일에 models.py에서 적었던 Blog를 import해주어야 한다. 그 다음 Blog.objects 라는 녀석을 blogs 라는 변수에다가 넣어 준다.. Blog.objects는 아까 admin페이지에서 확인했던 blog 안의 데이터들을 말한다.

render에서는 {'blogs': blogs} 를 추가했는데, blogs라는 변수를 template에서 쓸때 blogs라는 이름으로 가져오겠다고 명명하는 작업이다.

 

9. 가져온 데이터를 template에서 보여주기


우리가 만든 글쓰기 폼은  model에서 양식을 만들고,  admin 페이지에서 만든 양식으로 글을 쓰는것 까지 만들었다.
이제 글쓰기 폼으로 만든 글을 보여주기 위해서는 view를 거쳐서 데이터를 처리해서 templates로 보내야 한다. 


우리가 만든 templates인 home.html에서 우리가 작성한 글을 보여주기 위해서 '장고 템플릿 언어'를 쓴다. 

템플릿 언어를 써서 보여주자.


'장고 템플릿 언어'란? 장고로 개발할 시 html 템플릿에서 사용할 수 있는 특별한 규칙 또는 문법이다.

 

말 그대로 HTML 문서 상에서 코멘트가 필요할 때 사용한다.

  • 이는 주석과 비슷한 역할을 하고, 이는 장고로 개발할 시 웹 브라우저에 의해 해석되어 출력되지 않습니다.
  • 장고에서는 두 가지의 코멘트 형식을 제공합니다.
    1. {# #}
    2. {% comment %}
        {% endcomment %}

직접 만들어 보자. view.py에서 'blogs'라는 변수로 model의 데이터를 받이왔다면 
보여주는 home.html에서 템플릿 언어를 사용에 이 변수를 출력해보자.

 

home.html에서 다음과 같이 작성해주자.

 

 

이제 저장하고 서버를 실행 해보자. 

 

 

python manage.py runserver

 

 

 

이렇게 나오면 성공!

이전 글에서  장고는 어떻게 작동할까? 에서

 

결론 

Django는 프로젝트생성, 그안에 App 생성

만들어진 파일 및 폴더간의 티키타카(상호작용)으로 작동

한다고 했다.

 

그럼 장고에선 티키타카를 어떻게 할까? 

결론

MTV 패턴으로 한다. 

 

 

MTV란?

Model, Template, View의 약자 
우리가 장고프로젝트와 App을 생성하면 이 파일들이 있다. 

 

M, T, V 각각 독립적 임무 수행으로 Django가 작동한다.

 

MTV의 임무?

Model

  • Data Base를 다뤄주는 역할
  • 데이터 탐색 담당

Template

  • 사용자에게 보여지는 html화면
  • 보여주기 담당

View

  • 함수들이 모여있는 곳
  • 처리 담당

글의 내용

 

1. 장고는 어떻게 작동할까?

2. 장고프로젝트는 어떻게 생성할까?

3. 장고 프로젝트를 실행하자.

4. App 이란? App은 어떻게 생성할까?

5.App과 장고프로젝트 티키타카하기(hello World 띄우기)

6. 결론.

 

 

장고는 어떻게 작동할까? 

이전 글에서 장고를 설치했으면  (pip install django)  장고 프로젝트, App를 만들 수 있다. 

 

장고프로젝트를 생성하고 그안에 App을 만들면 여러 파일들과 폴더들이 만들어진다. 

이놈들의 티키타카를 통해 장고는 작동한다. 

 

장고프로젝트는 어떻게 생성할까? 

이전 작업했던 vs code 터미널창에서  (그림 설명참고) 

django-admin startproject <project 이름>

 

 

예시에서는 프로젝트명이 myproject

 

이제 django프로젝트가 어떻게 구성되있는지 보자.

 

 

 

manage.py 로 서버를 돌립니다.

 

 

장고프로젝트를 실행해보자.

 

python manage.py runserver

 

 

실행한 모습

 

 

여기서 터미널 창 안에서 http://127.0.0.1:8000/를 클릭하면 

(mac은 command + 클릭)

 

 

요럼 성공 

 

 


 

 

 

App이란? 

프로젝트의 구성 단위
App폴더 안의 파일들 과 장고 프로젝트 파일들의 티키타카로 구성된다.

 

 

App 은 어떻게 생성할까??

 

우선 경로를  장고프로젝트 폴더로 이동해준다.

cd myproject

 

 

그리고 App을 만들어 준다. 

python manage.py startapp <app이름>

예시에서 < app 명>은 myapp

 

 

그리고 App 폴더안에 templates 폴더를 만들어준다.

 

 

폴더 생성은 왼쪽 App 이름 오른쪽 클릭해서 만든다.

 

 

우선 알아둬야 할 파일& 폴더의 역할(일단)


settings.py

app 폴더의 위치와 설정을 저장

templates 폴더
사용자에게 보여질 화면(html)을 저장

views.py
사용자에게 보여질 화면(html)이 언제, 어떻게
처리될지 알려주는 함수 작성

url.py
작성한 html이 어떤 url을 입력했을 때
보여지게할지 설정

 

 

 


 

APP 과 장고프로젝트 티키타카 하기 (Hello World 띄우기)

 

 

 

1. template 폴더안에 파일html 만들기 (이름은 예시로 home.html)

2. 그 안에 hello world 쓰기.

 

 

 

 

 

 

3. settings.py에 App 추가하기

my project 폴더의 settings.py에서


INSTALLED_APPS 리스트에서 <App 이름>의 경로 추가하자.
예시로 만든 App 이름은 myapp이니깐  'myapp.apps.MyappConfig', 

<App 이름>의 폴더의 views.py파일에

 

4. <App 이름>의 폴더의 views.py파일에서  

 

 

def home(request):
    return render(request, 'home.html')

 

 

view.py에 넣은 모습

 

 

5. home.html의 url.py 에서

home.html의 사용될 url을 설계한다.

 

url.py에서

1. import myapp.views 해주고

2. urlpatterns리스트에 path추가해준다.

 

url.py에 넣은 모습

 

6.  http//127.0.0.1:8000/를 접속하면

잘 나오네

우리가 만든 home.html이 잘 띄어지면 성공.

 

 

 


 

 

Django는 어떻게 작동할까?

 

결론 . 

Django는 프로젝트생성, 그안에 App 생성

만들어진 파일 및 폴더간의 티키타카(상호작용)으로 작동

 

'Django > Django 시작하기' 카테고리의 다른 글

3. MTV 패턴 (알고가는 이론)  (0) 2019.11.07
1. django 시작 (기본환경 셋팅)  (0) 2019.10.02
0. django 공부 프롤로그  (0) 2019.09.29

웹브라우저를 제어하는 역할을 하는것이 자바스크립트


이 후 웹브라우저를 제어하는 다른 언어들이 생기기 시작함!
너무 중구난방이 되니깐 ECMA라는 표준안이 만들어짐 

 

 


ECMA  

웹브라우저를 제어하기 위한 언어들의 표준안 ( 자바스크립트가 포함되어 있음.)

따라서 
자바스크립트는 ECMA의 대명사 , 부분집합 

ECMA의 javascript의 줄임말이 ES6, ES7이라 한다 .


자바스크립트 연습해보는 방법 

 

1, 크롬

2. F12 
3.console 창에서 실습,연습 어떻게 자바스크립트가 동작하는지 확인 


 

자바스크립트에서 함수선언하는 방식은 3가지 

 

1. 함수선언문 방식

2. 함수의 생성자를 이용하는 방식

3. 함수의 표현식 방식   (권장) 

 

 


ES6에서 새롭게 추가된  let , const (기존 var와 차이?) 

var  a = 1   
var  a = 2  // 가능   
a  = 3        // 가능   

let  a = 1 
let  a = 2 // 불가능 
a = 3       //  가능    

const a = 1
const a = 2 //불가능
a = 3          //불가능 

* 참고로 


var a    이후 var a =1    // 가능
let a     이후 let a =2    //불가능 
const a 불가능 

'react native 시작하기' 카테고리의 다른 글

00.react.native 시작하기  (0) 2019.10.02

+ Recent posts