django 03. 첫번째 장고앱 2 - urls.py 와 views.py 수정

|

django 03. 첫번째 장고앱 2 - urls.py 와 views.py 수정

파이썬 웹 프로그래밍 - Django로 웹 서비스 개발하기

urls.py와 views.py 수정

urls.py 수정 (프로젝트 폴더 - mysite)

  • __init.py__ : 해당 파일이 있는 폴더가 module 이라는 의미
  • setting.py : 장고 setting
  • urls.py : url 규칙
    • 모듈 및 url 추가 예시
    from mylotto import views
    # mylotto app모듈 추가
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        # url(r'^$', views.index),
        # 정규표현식 ^시작 $끝
        # 아무것도 url을 입력하지 않았을 때, mylotto의 views의 index 메소드를 실행해라
        url(r'^hello/$', views.index, name='hello'),
        # /hello url로 접속했을 때 mylotto의 views의 index 메소드를 실행해라
    ]
    

url 패턴 작성을 위한 정규표현식(regex) 참고(장고걸스)

^ 문자열이 시작할 때
$ 문자열이 끝날 때
\d 숫자
+ 바로 앞에 나오는 항목이 계속 나올 때
() 패턴의 부분을 저장할 때
  • 이외에 url 정의는 문자적으로 만들 수 있다.
  • 예시 : http://www.mysite.com/post/12345/ 여기에서 12345는 글 번호를 의미

뷰마다 모든 글 번호을 작성하는 것은 정말 힘든 일이 될 거에요. 정규 표현식으로 url과 매칭되는 글 번호를 뽑을 수 있는 패턴을 만들 수 있어요. 이렇게 말이죠.
^post/(\d+)/$ 어떤 뜻인지 하나씩 나누어 어떤 뜻인지 알아볼게요.

  • ^post/는 장고에게 url 시작점에 (오른쪽부터) post/가 있다는 것을 말해 줍니다.
  • (\d+)는 숫자(한 개 또는 여러개) 가 있다는 뜻입니다. 내가 뽑아내고자 글 번호가 되겠지요.
  • /는 장고에게 /뒤에 문자가 있음을 말해 줍니다.
  • $는 URL의 끝이 방금 전에 있던 /로 끝나야 매칭될 수 있다는 것을 나타냅니다.

views.py 수정 (앱폴더 - mylotto)

  • views 에 index 메소드 추가
  • HttpResponse 모듈 import
from django.http import HttpResponse
# Create your views here.

def index(request):
    return HttpResponse('<h1>로또앱 index!</h1>')

요약

  • urls.py에 url 규칙을 넣어준다. (정규표현식)
  • 장고에 웹서버가 하나 있고, 브라우저에서 입력한 주소를 프로젝트 폴더의 urls.py에서 패턴을 분석한다.
  • 맞는 패턴이 있으면 해당하는 메소드를 실행한다.

django 03. 첫번째 장고앱 1 - MTV, 프로젝트 및 앱 생성

|

django 03. 첫번째 장고앱 - 로또 만들기, 프로젝트 및 앱 생성

파이썬 웹 프로그래밍 - Django로 웹 서비스 개발하기

Django and MTV

  • MTV
    • Model
    • Template
    • View
    장고와 MTV
  • Routing (-urls.py) : URL 파싱 후 View 에 전달
  • View :
    • URL 라우팅 규칙을 처리하는 오브젝트 - URL 디스패처
      (MVC의 V와 상관이 없다. Template이 오히려 V에 가깝다. Controller도 아니다. Controller의 역할은 장고 자체가 수행한다.)
    • Model로 부터 데이터를 수집 (데이터는 오브젝트(Dictionary) 형태로 전달)
    • 수집한 데이터 오브젝트는 Template으로 처리
  • Template :
    • html, presentation layer 담당
  • Model : Model 오브젝트는 DB 조작을 쉽게 해준다. ORM (Object Relational Model)
  • DB : Data 저장소, persistent 하게 데이터를 읽고, 쓰는데 Model을 사용한다.
views

프로젝트 및 앱 생성

  1. 프로젝트용 가상환경 (virtualenv) 설치
  2. 가상환경 실행
  3. 설치된 패키지 확인
  4. 장고 설치
  5. 프로젝트 생성
  6. setting.py 수정
  7. app 생성
  8. settingp.py 등록
  9. server 실행
<!-- 1. 프로젝트용 가상환경 (virtualenv) 설치 -->
$ python3 -m venv lotto

<!-- 2. 가상환경 (virtualenv) 실행 -->
$ source lotto/bin/activate

<!-- 3. 설치된 패키지 확인 -->
$ pip freeze

<!-- 4. 장고 설치 -->
$ pip install django==1.10

<!-- 홈 디렉토리 이동 -->
$ cd ~

<!-- 5. 원하는 폴더에서 프로젝트 생성 -->
$ django-admin startproject lotto

<!-- 6. setting.py 수정  -->
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
<!-- 관리를 편하게 하기 위해서 설정하는 부분  -->

<!-- 7. app 생성 -->
$ python manage.py startapp mylotto

<!-- 8. setting.py 등록 -->
INSTALLED_APPS = [
    'mylotto',  /*admin 위에 등록해야한다*/
    .....
]

<!-- 9. 서버 실행 -->
$ python manage.py runserver
Starting development server at http://127.0.0.1:8000/

  • 서버 실행시 Error: That port is already in use. 에러가 발생하는 경우,
    아래 명령어를 통해서 해결할 수 있다. 참고
$ sudo lsof -t -i tcp:8000 | xargs kill -9

170227_TIL

|

오늘 한 일

  • tryhelloworld 파이썬 강의 를 다 들었다. 블로그에 내용을 정리하면서 다 듣는데 3일 정도가 걸렸다. javascript 문법을 아는 상태에서 강의를 들으니, python과의 차이점을 비교하면서 문법을 익힐 수 있었다. 이제 장고 강의를 들으면서 문법에 대해서는 틈틈히 블로그에 정리한 글을 읽거나 책을 읽어야 겠다.

내일 할 일

  • 포트 (port) 공부하기
  • 장고 강의 듣기
  • 도서관 가서 공부하기

django 02. 파이썬 기초

|

django 02. 파이썬 기초

파이썬 웹 프로그래밍 - Django로 웹 서비스 개발하기

오브젝트란?

객체지향 프로그램

  • 프로그래밍으로 문제해결을 더 쉽게하기 위해
  • 큰 프로그램의 유지보수를 편하게 하기 위해
  • 막장을 미연에 방지하기 위해 사용하는 개발 방법론이다.

오브젝트 = 객체

  • Object is a thing
  • 실생활에 존재하는 어떤 것
  • 상태와 행동을 가짐

클래스

  • 오브젝트를 생성하기 위한 틀 (템플릿)
  • 상태(state)와 행동(behavior)를 가짐
  • 객체는 클래스의 인스턴스다.

Django와 Object

  • Django는 많은 부분에 객체를 활용한다.
  • Models
  • Class-based View
  • MTV (Model - Template - View)

요약

  • 클래스 : 메소드와 값을 가지는 사용자 정의 데이터 타입
  • 객체 : 클래스를 인스턴스화 한 것

오브젝트 실습

class Text:
    # pass # 아무것도 안하겠다는 의미
    def __init__(self, str):
        self.text = str

    def __str__(self):
        return "Text Class: " + self.text

t = Text("hi")
print(t) # Text Class: hi
print(t.text) # hi

클래스 변수와 인스턴스 변수

  • 관련 포스트 링크
  • 클래스 변수 : 모든 클래스의 인스턴스간에 값을 공유하는 변수
  • 인스턴스 변수 : 인스턴스마다 개별적으로 다른 값을 가지는 변수 (메소드 안에서 self와 함께 정의)
class User:
  num_users = 0 # class 변수
  def __init__(self, name):
      self.name = name # instance 변수 (메소드 안에서 self라는 키워드를 사용해서 선언하는 변수)
      User.num_users += 1

u = User('monkey')
print(User.num_users, u.name) # 1 monkey
u2 = User('sunshine')
print(User.num_users, u2.name) # 2 sunshine
print(User.num_users, u.num_users, u2.num_users) # 2, 2, 2
# 클래스 변수는 모든 인스턴스들 간에 값을 공유한다.
# class User의 인스턴스 u, u2 모두 똑같은 num_users 값을 가진다.

오브젝트 실습 2

class Text:
    def __init__(self, str):
        self.text = str

    def __str__(self):
        return "Text Class: " + self.text

class User:
    numUsers = 0 # 클래스 변수
    def __init__(self, name):
        self.numArticle = 0 # 인스턴스 변수로 초기화
        self.name = name
        self.articles = [] # 인스턴스 변수
        User.numUsers += 1

    def write(self, text):
        self.articles.append(text)
        self.numArticle += 1

    def __str__(self):
        return "User class: %s, %s" % (self.name, ' / '.join(str(p) for p in self.articles)) #방법 1
        # return 'User class : %s, %s' % (self.name, [str(p) for p in self.articles]) 방법 2


t = Text('This is some text')
t2 = Text('This is some text2')
user = User('monkey')
user.write(t)
user.write(t2)

# print([t][0])
print(t) # Text Class: This is some text
print(user,',',user.numArticle)
#monkey, Text Class: This is some text / Text Class: This is some text2, 2

오브젝트 실습 3

  • 장고에서 __str__ 메소드 오버라이딩과 클래스 상속은 자주 사용한다.
    (상속받는 클래스에서 함수를 재구현하는 것을 메서드 오버라이딩(Overriding) 이라고 부른다.)
class Text:
    def __init__(self, str):
        self.text = str

    def __str__(self):
        return "Text Class " + self.text

    def getLength(self):
        return len(self.text)

class Article(Text): #Article 클래스(자식클래스)는 Text 클래스(부모클래스, 슈퍼클래스)를 상속 받았다.
    def __init__(self, title, text):
        self.title = title
        self.text = text

    def __str__(self):
        return 'Article Class %s %s' % (self.title, self.text)

class User:
    numUsers = 0 # 클래스 변수
    def __init__(self, name):
        self.numArticle = 0 # 인스턴스 변수로 초기화
        self.name = name
        self.articles = [] # 인스턴스 변수
        User.numUsers += 1

    def write(self, text):
        self.articles.append(text)
        self.numArticle += 1

    def __str__(self):
        return "%s, %s" % (self.name, ' / '.join(str(p) for p in self.articles))

t = Article('hello', 'This is some text') 
t2 = Article('hello2', 'This is some text2')
user = User('monkey')
user.write(t)
user.write(t2)

# print([t][0])
print(t,', ',t.getLength()) # Article Class hello This is some text ,  17
print(user,',',user.numArticle)
# monkey, Article Class hello This is some text / Article Class hello2 This is some text2 , 2

django 01. 파이썬 설치 및 환경설정

|

django 01. 파이썬 설치 및 환경설정

파이썬 웹 프로그래밍 - Django로 웹 서비스 개발하기

파이썬 3 설치 - Mac OS

  • 기본버전은Python2이므로Python3 별도다운로드및설치
  • https://www.python.org/downloads/
  • Python3 최신버전다운로드(2016년12월3.5.2) 및설치

가상환경 설치 및 사용 - virtualenv

  • virtualenv은 프로젝트 별로 다른 환경을 사용할 수 있게 한다.
  • 가상환경 장고걸스 참고

    장고를 설치하기 전에, 개발 환경을 깔끔하게 관리하는데 큰 도움이 되는 도구를 설치해보겠습니다. 이 단계를 건너뛸 수 있지만, 한번 직접 해보는 것을 추천합니다. 제대로 설치해야 나중에 문제가 발생하지 않거든요!

    자, 이제부터 가상 환경(virtualenv라고 불러요)을 만들어보겠습니다. Virtualenv는 프로젝트 기초 전부를 Python/Django와 분리시켜줍니다. 다시 말해 웹사이트가 변경되어도 개발 중인 것에 영향을 미치지 않다는 것입니다. 어때요, 깔끔하죠?

가상환경 설치

mkdir djangogirls
cd djangogirls

python3 -m venv [원하는 이름 (ex. myenv)]

가상환경 실행

  • 가상환경 실행 후에는 콘솔 프롬프트에 (myenv - 설정한 이름)이 표시된다.
  • 가상 환경을 시작하고 나면 python이라고만 해도 지정한 버전의 파이썬이 실행되기 때문에 python3 대신 python이라고 입력해도 된다.
source myenv/bin/activate

(myvenv) C:\Users\Name\djangogirls>

django 설치 및 테스트

  • 장고설치 장고걸스 참고

    이제 virtualenv 가 시작되었으니, pip를 이용해 장고를 설치할 수 있어요. 콘솔에서 pip install django==1.10를 실행해보세요. (조심하세요. 이퀄기호가 두 개예요: ==).

장고 설치

pip install django==1.10

첫번째 django 프로젝트 만들기

장고걸스 참고

  • 장고 프로젝트 생성 : 장고의 기본 골격을 만들어주는 스크립트를 실행
  • 장고에서는 디렉토리나 파일 이름이 매우 중요하다. 따라서 경로와 이름을 임의로 변경해서는 안된다. 장고는 중요한 것들을 찾을 수 있게 특정한 구조를 유지해야한다.
  • 모든 것은 가상환경(virtualenv) 안에서 진행해야 한다.
    • 콘솔창에서 접두어로 (myvenv)가 안보인다면 먼저 virtualenv를 활성화해야 한다.
    • virtualenv 실행방법 (위의 가상환경 실행 참고)
  • 원하는 폴더로 이동하여 프로젝트 생성 (점 .은 현재 디렉토리에 장고를 설치하라고 스크립트에게 알려준다)
(myvenv) ~/djangogirls$ django-admin startproject mysite .
  • 생성한 프로젝트 폴더의 구성
    • manage.py : 파일 또한 스크립트인데, 사이트 관리를 도와주는 역할을 합니다. 이 스크립트로 다른 설치 작업 없이, 컴퓨터에서 웹 서버를 시작할 수 있습니다.
    • settings.py : 웹사이트 설정이 있는 파일입니다.
    • urls.py : urlresolver가 사용하는 패턴 목록을 포함
djangogirls
├───manage.py
└───mysite
        settings.py
        urls.py
        wsgi.py
        __init__.py

설정 변경

  • settings.py 내용 변경
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'

서버 실행

python manage.py migrate
$ python manage.py runserver

# 브라우저에서 127.0.0.1:8000 확인
장고프로젝트 서버 실행 화면

아톰 패키지 설치

  • 편리한 개발을 위해 아톰 에디터에서 별도의 패키지를 설치한다.
  • File –Settings –Package 아래 install 에들어가서아래패키지를설치
    • autocomplete-python
    • script
  • atom에서 cmd + i 단축키를 통해 파이썬을 실행할 수 있음
  • 한글 입력시 발생하는 문제 해결 방법