ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] 파이썬 장고 기초
    🍓𝗪𝗲𝗯 2020. 8. 12. 10:14

     django 

    : 서버 역할을 할 수 있는 웹 프레임워크

    프레임워크란, 웹 개발을 하기 위한 도구들을 미리 갖춘 것을 말한다.

    클라이언트와 서버가 명확히 구분되어 있지 않다. 빠르게 만들 수 있다.

    가장 유명한 서비스 : instagram. 내가 글을 쓰고, 댓글을 쓰고... crud가 들어가는 서비스에 적합하다.

    실시간 통신은 조금 어렵다.

     

    장고로 개발을 하지만, 그 내에서 클라이언트와 서버에 대한 ( 요청과 응답으로 이루어진 웹에 대한, ) 개념을 명확히 이해하고 있어야 한다.

     

    express는 바닥부터 만드는 느낌이라면, django는 만들어진 것이 많아서 거기에서 조합하는 느낌!

     

    요청에 대한 처리를 할 수 있게 된다.

    로그인 요청이 들어왔을 때, 우리 사이트의 회원인지 아닌지를 데이터베이스에 접근하여 확인한다거나,

    회원이라면 작성했던 글을 보여주는 등 여러 작업이 가능하다.

     

    장고는 많은 것들이 준비가 되어 있다.

    1. 많은 것들이 준비가 되어 있어서 빠르다.

    2. 장고의 보안은 안전한다. 장고 외의 php나 express는 바닥부터 해야해서,, 장고는 훨씬 안전 ! php는 해커의 타겟이 되기도 한다.

    3. 스케일을 키우기에 좋다. (글만 쓸 수 있는 블로그에서 댓글을 단다거나, 인스타그램처럼 사진을 추가한다던가 .. )

    4. 다양한 것들을 만들 수 있다.

     

    장고는 하나의 프로젝트(서비스)와 여러 개의 앱(큰 기능)으로 구성된다 !

    하나의 프로젝트 안에 여러 기능을 앱 단위로 관리한다. post 하는 app. login 하는 app.

    처음이기 때문에 프로젝트 하나에 앱 하나로만 진행한다 ! 

     

    프로젝트 만들기

    django-admin startproject firstproject

    프로젝트 명은 무조건 project 적어줄 것 ! 디렉토리 구조가 헷갈리기 때문이다.

    project 폴더 안에 있는 firstproject는 project 설정파일이다.

     

    장고에서 서버 켜는 방법.

    project에 들어가서 ls 쳤을 때 manage.py있어야 함.

    python manage.py runserver

    * 끌 때는 ctrl + c

    ctrl 누르고 링크 클릭하면, 장고 서버가 돌아가게 된다 !!

    ex)  127.0.0.1 (ip) 의 8000(포트)에서 돌아가게 된다.

     

    배경지식(1) ip와 domain이란 ?

    host : 네트워크에 연결되어 있는 컴퓨터.

    친구집 가는 것과 비슷하게, 호스트의 주소를 알아야 갈 수 있다.

    호스트의 직접적인 주소는 ip이다  ! ex) 192.168.0.100

    ip : 각각을 부르는 주소

    domain : 사람이 보기 편하게 변환한 주소 www.domain.com  

    domain은 ip와 연결 해야 한다 ! 나중에 직접 서비스화하려면, 처음에는 ip 밖에 없기 때문에 domain과 연결해주는 작업이 필요하다.

     

    배경지식(2) port란 ?

    : 뒤에 나옴

    ex. 127.0.0.1:8000

    ip와 port를 : 로 구분한다.

    port 컴퓨터들의 항구 역할. 배가 들어오는 지점.

    내가 어떤 프로그램에 접속할지를 구분하기 위해서, 프로그램별로 다른 port를 연다. 프로그램을 구분하기 위해 ip 뒤에 붙이는 것

     

    http: 80

    TCP: 22

    mail TCP:110

     

    장고의 ip는 loop back ip인 127.0.0.1(localhost)를 사용한다 !

    특별하게 쓰는 것으로 약속 되어 있는 ip.

    우리의 개인적인 컴퓨터에서만 접근할 수 있다.

    기본적으로 장고는 8000 port !

    배포할 때는 ip에 다른 사람들이 접속할 수 있도록 해야한다.

     

    endpoint (경로)

    내가 만들 페이지 각각에 따라 endpoint 만들어주고 라우팅(연결)한다.

    실습.

    /  Hello world !

    login/  로그인 페이지

    signout/  잘가 !

     

    장고의 흐름. 장고는 서버이다 !!!! 클라이언트는 따로 있음. 

    client             django

    Request ->  (1) urls.py   ->  (2) views.py   -> (2.5) models.py(ORM), templates - DB

     

    UI      <- (3) Response --------------|

     

    urls.py 수문장 ~! Request가 들어왔을 때 어떤 endpoint에 요청을 보내는 것인지 알아내고, 그에 해당하는, 연결되어 있는 views.py 호출

    views.py 핵심 역할 ! 예를 들어, 로그인 하고 싶어하는 호스트가 요청을 보내면, urls.py가 로그인인지 알아내고 로그인 views.py 호출한다. views.py는 로그인 요청이기 때문에, 호스트가 우리 회원인지 먼저 확인해야 한다. models.py (DB)에 가서 우리 회원인지 먼저 확인하고, login 성공하면 templates(http)를 응답에 담아서 통째로 전달하고, 호스트에게 전달한다.

     

    요청을 받고, 응답을 준다!

     

    앱 만드는 방법.

    ls 쳤을 때 manage.py가 있는 곳에서 !! app명은 뒤에 app 꼭 붙이기

    python manage.py startapp firstapp(앱 이름)

     

    Visual code에서 확인해보면, 

     

    app을 만들었다는 것을 프로젝트에게 알려줘야한다.

    project settings.py에 앱 이름을 추가해 줘야 한다.  * 끝에 , 붙여주기 ~~ !!!

    그리고 개발한다.

    / 왔을 때, Hello world 띄워주기.

    프로젝트 안에 urls.py에 들어가서, 내가 어떤 요청이 들어 왔을 때 그에 맞는 views.py 찾아줘야 한다.

    from firstapp import views 

     

    urlpatterns안에서, path('', views.helloworld, name="helloworld"),    -> root로 들어왔을 때 어떤 것을 띄워줄 것인가?

     

    views.py에서 helloworld함수를 추가해줘야 한다.

    우선, from django.http import HttpResponse 먼저 작성.

    def helloworld(request):  요청을 인자로 받고, 텍스트를 적은 응답 반환

           return HttpResponse("Hello World")

     

    GET 요청이 들어왔는데 / 로 들어왔고, 응답은 200 ( 잘 처리했다 )

    404 응답이 뜨면 페이지 오류 

    /login 으로 들어오면 로그인 되었습니다.

    /signout 으로 들어오면 잘 가~!

    히히 성공했땅 !ㅅ!

    재미쪄 

     


    templates에 응답을 담아서 보내기 ! 도전 ㅎㅅㅎ 

    장고에서 html을 사용하려면

    app안에 templates 폴더를 만들어 준다. 

    django의 templates는 편지봉투의 느낌이다 ! 응답을 templates에 담아서 보내는 거니까 !!!

    클라이언트에서 보여지는 html과는 다름. 장고는 백엔드이다잉~!!!!

     

    extension에서 Django 설치하기

     

    views.py에서 각각의 함수에서 각각의 html을 연결한다. 마지막 인자로 딕셔너리 형태(여러개도 가능)로 home.html에서 받을 수 있다 !

    name = '안오늘'

    return render(request, home.html, {'username' : name})

     

    home.html에서는 {{username}} 중괄호 두개로 사용 가능하다.

     

    실습

    로그인 하는 page, 결과를 보여주는 page . 2개의 html 필요

     

    html에서 사용하는 form의 action="{% url 'result' %} " home데이터를 보내는 곳. (종착지) 

    form데이터가 보내질 때 result 페이지가 연결된다.

    (% csrf_token %) 있어야 에러 안 나고 연결된다.

     

    <input placeholder="학생 이름" name="username"/>

    <button type="submit">학생 정보 확인하기</button>

     

    html에서 if 문 쓰는 방법 🖤

    {% if %}

    {% endif %}

     

    장고에서 css 사용하는 방법

    static이라는 폴더 만들고, 그 안에 원하는 css 파일을 만든 후

    html의 head 위에, {% load static %}

    head 안에 <link> 태그 만들기. <link rel="stylesheet" type="text/css" href="{% static 'home.css' %}" /> 

    *주의 밖의 따옴표와 안의 따옴표 다르게 해야 함!

    *html에서 url 대신에 static하는 것과 동일.

     

    댓글

ahntoday