티스토리 뷰


환경 : Windows7 64bit, PyCharm Professional, Django version = 1.96


pycharm의 설치경로입니다. Community 버전은 무료이고 좋은데, Django 지원을 하지 않습니다. 어쩔 수 없이 Professional 버전 30일 무료 버전을 설치하여 사용합니다.

https://www.jetbrains.com/pycharm/


1. 새로운 프로젝트 생성


2. Django를 선택한 후에, 프로젝트 위치, Python Version, Template folder, Application name을 한 번에 지정할 수 있습니다. 아래 세팅 과정에서는 Applicaion을 지정하지 않고 수동으로 만드는 과정입니다.

* Python version을 3.x 로 대부분 하는 것 같은데, 저는 라이브러리와의 호환성을 맞추기 위해 2.x 로 사용했습니다.


3. 프로젝트를 만들게 되면 기본적으로 경로에 아래와 같이 생성이 됩니다.

[ project_name ]


[ project_name/project_name ]


4. 위에서 Application을 설정해주면 아래는 넘어가셔도 좋습니다. 아래는 수동으로 app을 main이라는 이름으로 하나 만든 것입니다. 

'manage.py startapp main'

설정을 해주게 되면 아래와 같이 main(app)폴더 아래에 파일이 생성됩니다.

위에서 설정을 해주고 settings.py 에서 INSTALLED_APPS 부분에 생성한 app_name을 적어주고,  뒤에 ' , '는 필수로 적어주어야 합니다.


5. urls.py 에서 admin 사이트에 접속하기 위해서 아래와 같이 작성합니다.


6. app/views.py 에서 index라는 함수를 만들고, return으로 index.html 창으로 렌더링하게 됩니다.

7. 위와 동시에 urls.py에서 바로 root로 아무 경로를 주지 않았을때 r'^$ 를 사용하고 6번에서 views.py의 index 함수를 불러와서 index.html을 출력하게 됩니다. 

동작구조 : urls.py(views.py의 함수 요청) -> views.py(urls.py가 요청한 해당 함수의 html을 렌더링) -> html 출력 

이제 templates 폴더에 index.html을 만들면 끝입니다.


8. 이제 DB를 만져보겠습니다. models.py에서 Post라는 모델을 생성해보겠습니다.

모델에는 title(제목)과 content(내용), 날짜를 간단하게 넣어서 확인 해보겠습니다.

django 에서는 위와 같이 model을 정의해주면 무조건 아래와 같이 makemigrations, migrate 과정을 진행해야 합니다. 

migrate 과정이 끝나게 되면, main/migrations 폴더에 0001_initial.py 파일이 생성이 됩니다. 

0001_initial.py 파일 소스를 보면, id값은 자동으로 기본키로 생성이 되었고, title, content, 날짜가 생성된 것을 볼 수가 있습니다.


9. settings.py의 DATABASES에서 DB를 결정해야 하는데, sqlite3를 사용하고, db.sqlite3라는 파일이름을 생성하겠습니다.

* slqite3가 아닌, pgsql, oracle 과 같은 DBMS를 사용해도 됩니다.


10. admin 페이지에 접속하기 위해서 admin.py에 아래와 같이 작성합니다. 쉽게 말해서 Post라는 모델을 admin에서 사용하겠다는 뜻입니다.

admin페이지에 접속을 하게 되면 로그인창이 뜨는데, 이때 createsuperuser를 이용해서 관리자계정을 설정합니다. Email을 제외한 username, password를 작성하면 계정이 등록됩니다.


admin 페이지에 접속을 하게 되면 아래에 Post라는 model이 들어온 것을 볼 수가 있습니다. 모델이 생성될 때마다 아래에 생성이 됩니다.


11. models.py로 돌아와서 def __unicode__를 이용해서 title을 리턴하게 되면, 관리자 페이지에서 title이 정상적으로 테이블에 출력됩니다.

* python 2.x : __unicode__ 

* python 3.x : __str__


PostAdmin이라는 클래스를 만들고 list_display에 id, title을 명시해주면 id와 title이 나란히 보이게 되고, register에는 Post와, PostAdmin을 같이 작성을 합니다.

위에서 설정한대로 admin 페이지에 post 모델에는 id와 title이 보입니다. 


이제 html에 뿌려주기 위한 방법을 알아봅니다. 


views.py의 index 함수에 Post 모델의 객체들을 모두 post_list에 반환을 하고, index.html으로 렌더링을 할 때, 세 번째 인자로 반환받은 post_list를 변수화 시킵니다. 이제 post_list는 index.html에서만 사용할 수가 있는 변수가 되었습니다.


* django 문법으로 html에서 python을 쓰기 위해서는 {% %} 안에 작성을 해주어야 하고, for문을 사용하는 것은 파이썬 기존 문법과 동일하지만, {% for in %} 을 처음으로 선언하고 {% endfor %} 로 끝내주어야 html에서 python for문으로 사용할 수가 있습니다.

아래와 같이 post_list를 for문으로 돌리고 각 post의 list 마다 title과 content를 가져오게 됩니다. 

 


12. 아래 urls.py는 Python 정규표현식을 사용하여 pk(위에서 자동으로 생성된 기본키)가 숫자인 값을 인식하고, views의 post_detail에 전달합니다.

위에서 기본키(숫자)를 입력하면, 이제 views.py에서는 post_detial이라는 함수에 pk라는 인자를 받습니다. 주의할 점은 urls.py에서의 pk와 post_detail의 인자로 있는 pk는 이름명이 꼭 같아야합니다. 

pk라는 값을 이제 Post.objects.get을 이용하여 'pk=pk' 인자로 들어온 pk 값을 기본키(pk)에 넣어줌으로써 post 인자에 넣습니다.

post라는 값을 가지고 post_detail은 post_detail.html로 렌더링을 하게됩니다.

이제 post_detail.html을 하나 생성하고, 아래와 같이 post에 해당하는 title과 content를 불러옵니다.

* linebreaks : 자동 줄바꿈

오른쪽 그림과 같이 경로를 1로 주면 id가 1인 title과 content가 보이게 됩니다.

 



13. 사용자에게 댓글을 받기 위해서 Comment '댓글'이라는 model을 생성 후에 꼭  8번과 같이 마이그레이션을 필수로 해주어야 합니다.

관리자페이지에 보이기 위해서는 admin.py에서 'admin.site.register(Comment)' 라고 적어주어야 합니다.

 


14. 댓글을 구현하기 위해서 django의 form을 사용하겠습니다.

forms.py 를 생성합니다.


forms.py에 아래와 같이 작성합니다. 13번과 같이 models.py에서 Comment 모델을 import 시킨 후에, CommentForm 클래스 안의 Meta 클래스의 model에 Comment를 적어주고, 아래 fields의 __all__은 Comment 모델의 모든 필드를 사용하겠다는 의미입니다.

* 장고 form에는 form, modelform이 있는데 form을 사용하게 되면 안에 들어가는 필드를 모두 정의해줘야 하는데, modelform을 쓰게되면 지정된 모델로부터 각 필드 정보를 읽어서 form 필드를 자동생성 해줄 수가 있습니다.

아래 처럼 fields에 author, message만 주게 되면 Comment 필드의 author와 message 필드만 사용하겠다는 의미입니다.

 

urls.py에 가서 pk/comments/new에 views.py의 comment_new 함수로 이동하게 설정합니다. 


views.py의 comment_new함수에 가서 아래와 같이 작성을 하는데, 장고에서 form을 처리하는 루틴이라고 합니다. 

과정을 간단히 설명하면, 아래의 comment_new 함수가 처음 실행이 되면 method가 post인지 알아보고 아니라면 forms.py의 CommentForm을 form에 넣어주고  post_form.html에 form을 렌더링 하게 됩니다. 

post_form에서 댓글을 작성하고 submit 버튼을 누르면 method는 post로 동작하고, comment_new에서 request와 pk 값을 받고 views에 있는 post_detail로 pk와 같이 redirect하게 됩니다.


[ post_form.html ]



[ post_detail.html ]


15. 수정하기 버튼을 활성화 시켜보겠습니다. 댓글을 수정할 수가 있게 됩니다.

urls.py에서 이제 views의 comment_edit으로 이동하게 해주는 것을 만듭니다. post_pk는 기존의 게시물의 기본키이고, pk를 comment의 pk로 생각하고 urls.py를 적어줍니다. comment_eidt으로 post_pk와 pk를 보내게 됩니다.


views.py의 comment_edit은 위에서 작성한 comment_new와 비슷합니다. 몇 가지 추가를 해준게 있다면, comment 변수에 Comment 객체의 pk를 넣어주었고, CommentForm에 instance로 comment를 넘겨주는 작업을 했습니다.

아래는 post_detail 부분에 수정하기 태그를 넣어줍니다. 


16. 이미지 첨부 기능을 하기 위해서 Post 모델에 photo 필드를 만듭니다.

이미지를 올리기 위해서는 기존의 PIL 라이브러리는 업데이트가 끊겨서 요즘엔 pillow 라이브러리를 쓴다고 합니다.


이미지를 업로드하기 위해서는 settings.py에서 아래에 MEDIA_ROOT와 MEDIA_URL을 생성합니다. 업로드한 파일은 media 폴더에 저장이 되는 형태로 동작합니다.

* static_url은 css나 js 같은 파일을 한 곳에 저장하여 효율적이게 사용한 폴더입니다. 혹시나 무료 템플릿을 받아서 사용할 때에는 static 폴더에 넣고 사용하면 됩니다.


urls.py에서 설정할 것이 있는데, 빨간색으로 칠한 것을 작성해주면 됩니다. 

이제 post_detail.html에서 post모델의 photo 필드를 받아서 img 태그로 photo 태그의 url(절대경로)를 가져와 출력하게 됩니다.



복잡한 과정을 거치고 간단한 게시판, 댓글, 이미지첨부 기능을 만들어 봤습니다. 

위와 같은 과정은 어떤 프로젝트를 하던지 뼈대가 되는 부분이라 중요한 부분인 것 같습니다.


참고 : AskDjango 이진석님 강의

'프로그래밍 > Python' 카테고리의 다른 글

Python - map 함수  (0) 2016.12.27
RSA 암호화 / 복호화  (0) 2016.12.26
Telegram Bot을 이용한 악성코드 분석 자동화  (0) 2016.04.16
[Python] Writing the Setup Script  (0) 2016.03.29
[Django] view 설정, template 설정  (0) 2016.03.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함