backend/django

django tutorial: 첫 프로젝트 만들기, 서버 동작 (part1)

seul chan 2017. 2. 28. 23:53

*CREATE new project

$ django-admin startproject mysite

#mysite 대신에 프로젝트명을 적는다. 나는 공식 문서 튜토리얼대로 mysite로 만들었다.


#새로운 장고 프로젝트를 실행하면 아래와 같이 폴더/파일이 생성된다.


mysite/                # root directory, can rename anything

     manage.py     # command-line utility

     mysite/           # actual Python package, use this name to import things inside

                           (ex: mysite.urls 처럼 불러오면 된다)

                           (https://docs.djangoproject.com/en/1.10/ref/django-admin/)

     __init__.py    # 해당 directory가 Python package임을 알려주는 빈 파일이다. 

                            파이썬 초심자라면(https://docs.python.org/3/tutorial/modules.html#tut-packages)를 읽어볼 것

        settings.py   # 각종 세팅(https://docs.djangoproject.com/en/1.10/topics/settings/) 참고

        urls.py       # 장고 프로젝트에서 URL을 선언해 주는 파일이다. 'Table of contents'

                          # (https://docs.djangoproject.com/en/1.10/topics/http/urls/)

        wsgi.py       # WSGI-compatible 웹 서버와 관련된 파일 (??)

                           # (https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/)



*장고 서버 실행하기

$python manage.py runserver

단순 개발용이기 때문에 절대로 다른 production environment에서 사용하지 말것 (장고 사이트에서 명시)


이후 localhost:8000을 실행하면 It works!라는 페이지가 뜬다! 


*port changing

default로 runserver는 8000번 포트에서 서버를 실행시긴다

=> python manage.py runserver 8080

=> python manage.py runserver 0.0.0.0:8080

과 같은 방법으로 변경할 수 있음


*Polls app 만들기
app은 Python path의 어디에나 위치할 수 있다. 
=> polls app은 manage.py 파일 옆에 (top-level modul에 만들 것이다.)

app 만들기
$python manage.py startapp polls
mysite 폴더 안에 polls 폴더가 만들어진다. 


*앱에 기능 추가하기

polls/views.py 를 실행시켜 아래 코드를 적는다.


from django.http import HttpResponse

def index(request):

return HttpResponse("Hello, world. You're at the polls index.")



*polls 앱의 URL 수정하기

이 view를 부르기 위해서 URL을 수정해야 한다.

# URLconf가 필요하다

# polls 폴더의 urls.py를 만든 뒤 코드를 삽입한다.



from django.conf.urls import url

from . import views # views.py에서 모든 def를 불러온다.


urlpatterns = [

    url(r'^$', views.index, name='index'), 

    # 해당 url에서 views.index라는 templete으로 이동

]



*mysite의 ULR 수정하기

# polls.urls의 모듈을 포인트 해줘야한다.

# mysite/urls.py를 수정하여야한다. 


from django.conf.urls import include, url

from django.contrib import admin


urlpatterns = [

    url(r'^polls/', include('polls.urls')),

    # include() 기능은 다른 URLconfs를 지정하게 해준다. 

    # => $ 를 사용하지 않고 /를 사용 => URL이 매치되는 부분으로 sending 해주기 때문

    url(r'^admin/', admin.site.urls

]

        

# incluede() 안에 오는 것은 plug-and-play URLs을 쉽게 만들어 준다?? 

# URLconf (polls/urls.py)나 기타 등등을 해도 상관 없음

        

# 다른 URL 패턴을 활용  => 항상 inclue()를 사용해야한다. 

# admin.sinte.urls만 유일한 예외



*서버 테스트해보기

$python manage.py runserver 로 실행 후

http://localhost:8000/polls/ 를 실행하면

Hello, world. You're at the polls index. 가 뜨는것을 확인 가능하다



*url()이 갖는 arguments

url( ) 기능은 4가지 arguments를 갖는다.

# regex, view는 필수적이고

# kwargs, name은 선택적이다. 


# regex

# "regular expression" => url patterns를 매칭시켜주는 구문

# GET, POST parameters를 검색하지 않음

# ex) https://www.example.com/myapp/?page=3 

#      => URLconf는 myapp/ 을 찾음


# view

# 장고가 regular expression(regex를 매칭) => view function을 부름

# ??


# kwargs

# Arbitary keywords arguments => ...


# name

# URL에 nameing => 모호함 제거, 특히 템플릿에서