1. python 설치 - anaconda 3 64 bit 설치
2. easy_install django, 최신버전 특정 버전 django==1.9
3. django-admin --version
참조 Link
4. core file 생성
5. django-admin startproject MyProjectName
6. pycham 설치 및 MyProjectName open
7. manage.py 파일은 사용하는 것이지 수정하는 것이 아니다.
8. __init__ 파일은 내용이 없으며 MyProjectName 이라는 폴더가 그냥 폴더가 아니라 python package 라는 것을 알려준다.
9. setting.py 는 웹싸이트에 필요한 것들을 설정해 놓은 것이다.
10. urls.py 웹싸이트의 내용들(contents)을 보여주는 테이블이다. 특정 url 을 연결해 준다.
11. wsgi.py 는 특별한 서버의 기능을 나타내며 긴 시간이 지난 후 배우니 신경쓰지 않아도 된다.
12. 처음에는 setting.py, urls.py 만보면 된다.
13. python manage.py runserver 를 쓰면 지금 첫 생성한 프로젝트를 서버레 올려준다.
14. 127.0.0.1:8000 에 웹브라우저로 접속하면 초기 화면을 볼 수 있다.
참조: Link
15. 서버가 돌아가고 있을 때 소스코드를 변경하여도 서버를 재시작 하는 것이 아니라 브라우저로 접속을 다시하면 업데이트 된 것을 볼 수 있다.
16. python manage.py startapp music 하면 새로운 app 이 나타난다.
- app 을 만든다. app 은 하나의 일을 하는 단위이다.
참조: Link
17. music 폴더 속의 파일 이름들을 보면 전체를 그려볼 수 있다.
18. wesite 나 소스코드 들을 database 에 hook up 하는 것이며, django 에서는 한 줄이면 된다.
19. admin.py 은 admin 권한을 이야기 한다.
20. apps.py: 이 app의 configuration을 위한 파일이다.
21. model.py: database 에 대한 blueprint 이다.
22. tests.py 는 테스트를 작성할 수 있는 공간이란 뜻이다.
23. views.py 파이썬 함수들이 있는 곳이며, 유저의 요청을 받아 들여서 그 요청한 것에 대한 결과를 다시 보여주는 것이다. 95%의 확률로 어떤 웹페이지를 요청하고 그 웹페이지를 전달해 주는 것이다.
참조: Link
24. 어떤 웹페이지를 요청하게 되면 urls.py 를 확인하게 된다.
25. 아래와 같이 쓰면 music 으로 접근했을 때 music app의 아래에 있는 urls.py 에서 어떤 동작을 할 지를 찾게 된다.
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^music/', include('music.urls')), ]
26. music app urls.py 파일에서는 아래와 같이 해당 regular expression 일 대 view.py 에 선언되어 있는 index 함수를 부르게 된다.
참조: Linkurlpatterns = [ url(r'^$', views.index), ]27. index 함수는 "This is the music app homepage" 문장을 리턴해 주는 Http 문장이므로 이를 웹브라우저에 보여준다.def index(request): return HttpResponse("<h1>This is the music app homepage")
28. 데이터 베이스를 만들려고 한다. 그러기 위해 django 에서 중요한 내용을 습득해야 한다.
29. django project를 만들면 default로 sqlite db 가 만들어진다.
30. 이것은 setting file의 77라인에 DATABASES 라는 구조로 만들어져 있다.
31. django 는 mysql 이나 XX 등 어떤 database 나 쓸 수 있지만 기본으로 되느 sqlite3 는 어려움 없이 사용할 수 있어서 테스트에 최적이다.
32. 기본으로 아래 APP 들이 설치되어 있다. 이 앱들은 데이터 베이스에 접근해야 동작하는 것들이 있다. 하지만 migration 이 되어있지 않아 앱이 제대로 실행되지 않은 상태이다.
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',]33. 데이터베이스와 싱크가 맞지 않아서 벌어지는 것이다.
34. 콘솔에서 python manage.py migrate 누르면 싱크가 된다.
35. 각 앱이 실행하기 위한 테이블이 데이터베이스에 있고 앱과 데이터베이스가 싱크가 된 것이다.
36. 싱크한 후 python manage.py runserver 하면 이번에는 no issue 라고 뜬다.
참조: Link
37. 이제는 Model 을 만들려고 한다. Model 은 저장할 데이터에 대한 blueprint 이다.
38. 코드와 데이터베이스의 셋팅은 따로 떨어져 있지 않다. Model.py 에서 한번에 할 수 있다.
39. Model.py 파일에서 class 를 만들면 자동으로 데이터베이스 테이블로 만들어 준다.
40. 각 데이터끼리는 연결해 주고, 포함관계에 따라 지워질 수 있다.
class Album(models.Model): # 이것들은 컬럼 artist = models.CharField(max_length=250) album_title = models.CharField(max_length=500) genre = models.CharField(max_length=100) album_logo = models.CharField(max_length=1000) class Song(models.Model): # 앨범을 지우면 그 앨범에 연결된 곡은 같이 지워진다. album = models.foreinKey(Album, on_delete=models.CASCADE) file_type = models.CharField(max_length=10) song_title = models.CharField(max_length=250)참조: Link
41. 새로 만든 앱은 setting.py 에서 추가해 준다.
INSTALLED_APPS = [ 'music.apps.MusicConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',]42. models.py 에서 class 생성한 것을 데이터베이스에 연결 시키려면 python manage.py makemigrations music 이라고 명령을 주어야 한다.
43. migration 이라는 말은 데이터 베이스에 적용시킨다는 것이다.
44. python manage.py migrate 하면 적용 완료 시켜준다.
참조: Link
45. python manage.py shell 을 구동시켜서 데이터베이스에 데이터를 저장할 수 있다.
참조: Link
46. object를 읽을 때 __str__ 함수를 사용해서 object 가 아닌 문자열을 리턴할 수 있다.
47. filter 를 써서 필요한 정보만 읽을 수 있다.
참조: Link
48. python manage.py createsuperuser 를 하면 admin 계정을 만들 수 있다.
49. Music 폴더의 admin.py 에 Album 정보를 넣으면 admin.site.register(Album) 을 적으면 된다.
참조: Link
50. view 는 간단한 함수로서 html 을 리턴해 주는 것이다.
51. urls.py 에서 어떤 정규식과 같은 url이 불리면 views.py 의 특정 함수가 불리게 되고 그 함수의 return 값이 html 이다.
참조: Link
52. 가지고 있는 Album 정보를 모두 페이지에 디스플레이 하려고 한다.
53. views.py 에서 music page 를 보여주는 index 함수를 수정한다.
54. 아래와 같이 database 의 정보를 all_albums 라는 변수로 연결시켜 준다.
all_albums = Album.objects.all()
55. album 의 각 정보를 loop 돌면서 출력해 주면 music 페이지에서 해당 리스트를 볼 수 있다.def index(request): all_albums = Album.objects.all() html = '' for album in all_albums: url = '/music/' + str(album.id) + '/' html += '<a href="' + url + '">' + album.album_title + '</a><br>' return HttpResponse(html)참조: Link
56. 데이터 베이스의 내용을 가지고 웹페이지에 쓰는 것 까진 했지만 웹페이지가 투박해서 꾸며야 한다.
57. template 를 만드는 방법을 생각해야 한다.
58. music 폴더에서 template 이라는 자식 폴더를 만들고, 그 자식으로 music 폴더를 만든다.
59. 그 안에 index 라는 이름의 html 파일을 만든다.
60. 아래와 같이 연결하면 자동으로 template 폴더의 내용물을 찾는다.
template = loader.get.get_template('music/index.html')61. template 를 load 한 다음 내용을 render 하면 된다.
62. python 에서 있던 내용을 context 라고 하는 dictionary 로 만들어서 render 할 때 인자로 넣어주면 된다.
63. html template 안에 python 코드를 넣으면 된다. 넣는 방법은 {% 여기에 넣는 것 %} 이다. 그 때 html 속에서 사용되는 변수는 {{ 이것으로 둘러 쌓인다 }}
64. html 속에서 python if 문을 아래와 같이 쓸 수 있다.
참조: Link
65. django.shortcut 을 쓰면 경로를 단축시킬 수 있다(예를 들어 template.render -> render)
참조: Link
66. 앨범이 있는 것 없는 것 확인하여 없으면 404 에러를 띄울 수 있게 한다.
참조: 16 - Raising a 404 HTTP Error
참조: 17 - Adding Songs to our Database
참조: 18 - Related Objects Set
참조: 19 - Designing the Details Template
XX. url 구조를 dynamic 하게 만드는 법
참조: 20 - Removing Hardcoded URLs
참조: 21 - Namespace and HTTP 404 Shortcut
참조: 22 - Simple Form
참조: 23 - Adding Forms to the Template
참조: 24 - Favorite View Function
참조: 25 - Bootstrap and Static Files
참조:
참조:
참조:
참조:
참조:
참조: