일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- hive beeline 실행
- 자소서 빨리
- 자소서 빨리 쓰는 법
- 이더리움
- mac hadoop 설치
- Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000
- Failed to connect to localhost:10000
- 기업 조사 빨리 하는 법
- 백준 18428
- 자소서 시간 줄이기
- 이더리움 #ethereum
- mac hive
- 카카오 자물쇠와 열쇠
- 도커 교과서
- 자소서 너무 오래 걸림
- Safe mode is ON
- code=0)
- mac hadoop 3
- hive beeline 에러
- hadoop safe mode leave
- mac hadoop
- is not allowed to impersonate hive (state=08S01
- Resources are low on NN
- hadoop safe mode
- 카카오 2020 코테
- hive beeline 설정
- hive beeline
- mac hive 3
- 카카오 2020 코딩테스트
- mac hadoop 설정
- Today
- Total
A seeker after truth
django 공부 도중 모르는거 검색한 내용 + 기억하기 위한 기록(2)-북마크 만들기 본문
django 공부 도중 모르는거 검색한 내용 + 기억하기 위한 기록(2)-북마크 만들기
dr.meteor 2020. 1. 23. 14:31* 본문은 <django로 쉽게 배우는 배프의 오지랖: 파이썬 웹 프로그래밍>(2019, 디지털북스, 배프)를 공부하면서 기록한 내용입니다.
코드: https://github.com/secureWKkim/DjangoBookmarkStudy
1. 북마크 앱에서 데이터베이스 관련 변경 사항이 있는지 확인하고 변경할 내용이 있다면 파일을 생성한다. 이런 파일이 마이그레이션 파일이며, migrations 폴더 아래에 00XX_initial.py와 같은 파일명으로 순서대로 쌓인다.
2. 관리자 페이지에 모델을 등록하는 일(admin.py)
모델을 이용한 데이터 작업을 하려면 해당 뷰를 만들어야 한다. 하지만 뷰를 만들기 위해선 시간이 걸린다. 또 뷰를 만들면서 확인하는 작업을 할 때 미리 입력된 데이터가 필요하기도 하다. 그래서 관리자 페이지에 미리 모델을 관리할 수 있도록 등록해두면 편리하다. 그게 아래 코드에 해당하는 일이다.
from django.contrib import admin
# Register your models here.
from .models import Bookmark
admin.site.register(Bookmark)
admin.py는 모델을 관리자 페이지에 등록해 관리할 수 있도록 하는 역할과 관리자 페이지에서 보이는 내용의 변경, 기능 추가 등을 할 수 있도록 코드를 입력하는 파일이다.
3. __str__은 클래스의 오브젝트를 출력할 때 나타날 내용을 결정하는 메서드다. 알지만 명확하게 하기 위해 적었다. 얘가 반환하는 값은 항상 문자열. 이걸로 에러낸 경험 한번 있어서(기말고사) 적어둠
4. 관리자 페이지를 이용해 모델을 관리할 수 있지만 제대로된 서비스를 만들기 위해선 프론트에서 해당 기능을 사용할 수 있어야 한다. 이런 기능을 뷰라고 부른다. 이 뷰에 클래스형/함수형 뷰가 있는 것. 그 중 전자의 경우 generic에서 웹 프로그래밍에서 자주 쓰는 기능을 장고가 미리 준비해둔 것이므로 이걸 빌려다 쓸 수 있고, 전형적인 뷰가 필요한 지금같은 경우(북마크) 클래스형 뷰가 적합하다.
5. 어떤 주소를 사용해 이 뷰를 호출할 것인지 연결하는 부분이 urls.py. config 폴더에 있는 루트 파일과 각 앱 폴더에 만들어 두는 서브 파일들이 있는데, 루트 urls.py 파일만 있어도 무방하지만 한번 만든 앱은 다른 프로젝트에도 재사용할 수 있으므로 앱에 관한 urls.py 연결은 앱 폴더에 있는 urls.py에 설정. 그리고 앱에 관한 urls.py의 내용은 루트 파일에서 연결해줘야만 동작한다.그래서 루트 urls.py파일에 path를 추가하는 것이다.
6. config/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('bookmark/', include('bookmark.urls')),
]
http://127.0.0.1:8000/bookmark/[이하url] 같은 주소로 접속 시 bookmark/까지의 url을 잘라내고 나머지 부분을 bookmark.urls로 전달해 찾아본다. 나머지 부분을 갖고 어떤 뷰를 연결할지는 아래 7번으로 간다. 여기서 bookmark.urls 는 bookmark 폴더 밑의 urls.py 를 말하는 것이다!!
7. bookmark/urls.py
from django.urls import path
from .views import BookmarkListView
urlpatterns = [
path('', BookmarkListView.as_view(), name='list'),
]
path의 첫번째 인자에 아무것도 없다 즉, bookmark/이하 부분이 없다고 생각하면 된다. 그럼 북마크 앱의 루트 페이지같은 역할을 한다고 생각하면 된다. 이런 주소로 접속했을 때 BookmarkListView란 뷰를 호출하겠다는 것이며, 함수형 뷰면 뷰 이름만 써주면 되지만 클래스형 뷰일 경우엔 뒤에 .as_view()를 반드시 붙여줘야 정상적으로 동작한다. 마지막 인자인 name은 설정한 이름을 가지고 해당 url 패턴을 찾을 수 있도록 하는 역할을 한다.
8. update 기능을 만들었다. update 버튼을 눌렀는데 에러가 뜬다?!
눌렀을 때 어떤 페이지로 이동할지 정해져있지 않아서 그렇다. 이동할 페이지는 뷰에 success_url이 설정되어 있거나 모델에 get_absolute_url이란 메서드를 통해 결정한다. 그래서 둘 중 하나가 있어야 한다.
9. reverse, reverse_lazy 는 무엇인가
아직은 봐도 잘 모르겠다. 이해 안됨
참고: https://docs.djangoproject.com/en/3.0/ref/urlresolvers/
https://wayhome25.github.io/django/2017/03/14/django-07-kilogram-03-signup/
10. "템플릿 확장"=?
어떤 웹사이트에 들어갔을 때, 어떤 페이지를 가든 항상 동일하게 보이는 내용인 메뉴바나 타이틀 같은 부분을 GNB(Global Navigation Bar)라고 한다. 그럼 서로 다른 템플릿에 이 메뉴바나 타이틀을 구현하려고 하면, 5개건 100개건 내가 만든 모드 파일을 수정해야할까? 그렇게 되면 너무 힘들다. 그래서 존재하는 방법이 '템플릿 확장'이다. 기준이 되는 레이아웃 부분을 담은 템플릿을 별도로 만들어두고 기준 템플릿에 상속받아 사용하는 것처럼 재사용하는 방법이다. 프로젝트 루트에 templates라는 폴더를 만든 뒤, base.html을 만들어 다른 템플릿에서 상속하여 사용하면 된다.
11. 부트스트랩의 link 태그를 base.html의 head 태그 안쪽에 복붙해 넣었더니 갑자기 부트스트랩이 적용됐다! 어떻게 된 일일까? 부트스트랩은 html 태그의 class 속성을 기준으로 css를 적용해 디자인을 입히는데, 기존의 html코드에 미리 class를 적절히 입력해 놓았기 때문인 것. 아래 링크에서 외부 스타일시트 적용하는 방법을 참고하면, 이 방법에 대해 조금 더 이해할 수 있다.
http://www.tcpschool.com/html/html_expand_css
12. 정적 파일 관리 부분
배포할 때, 파이썬 애니웨어에서 WSGI 파일 설정 시 StaticFilesHandler를 사용했다. 그러나 이 방법은 서비스를 배포할 때 잘 사용하지 않는 방법이다. 장고는 배포 상태일 때 정적 파일 핸들러로 정적 파일을 사용하지 않기 때문에, 배포 상태가 아닌 상태였다면 style.css는 사용할 수 없는 상태였을 것이다.
배포 상태일 땐 정적 파일을 STATIC_ROOT란 변수로 설정해둔 경로에 모아두고 웹 서버에서 이 파일을 찾아보도록 설정하는게 일반적이다.
html 코드
1) <div>: division의 줄임말로, 홈페이지에서 구역을 분할하고 만들 때 사용한다. 요즘 레이아웃 배치를 이 태그로 많이 해서 중요성이 더욱 커졌다고 한다.
그럼 <div class = ~> 이렇게 되어있을 때 클래스는? 이건 일종의 구역명인 것 같다. 같은 역할을 하는 것으로 id가 있는데, id는 고유의 이름을 딱 한번만 사용할 수 있는데 반해 class는 한번 썼던 클래스명도 중복해서 사용할 수 있고, 둘다 css 선택자로 사용된다.
참고: http://webberstudy.com/html-css/html-1/div-span-and-class-attr/
2) table, thead, tr, th, td
table: 표를 말한다.
thead: 말만 봐선 이게 무슨 역할인지 와닿지 않음. 실행해보고 다시 와서 적어보겠다
tr: table row인듯. 테이블에서 열을 구분해 줌
th: table header..?(추측) 테이블에서 제목을 나타내며, 모든 내용은 자동으로 굵은 글씨에 가운데 정렬이 된다.
td: table division...?(추측) 테이블의 열의 각각의 셀(cell)로 나누어준다.
참고:
http://www.tcpschool.com/html/html_basic_tables
http://tcpschool.com/html-tags/thead
3) target: a href에서 링크된 페이지를 새 탭으로 열지, 새 창으로 열지 등등을 결정하는 속성이다.
참고: http://www.tcpschool.com/html/html_basic_links
4) form의 value 속성
value 속성은 3가지 역할을 한다. 아.. 이거 1편 포스트 수정해서 거기에 링크 첨부함.
5) nav: 구획을 나타낼 때 쓰인다. 아래 문서가 진짜 잘되어있음!
https://developer.mozilla.org/ko/docs/Web/HTML/Element/nav
'Programming Language > Python' 카테고리의 다른 글
django 공부 도중 모르는거 검색한 내용 + 기억하기 위한 기록(3)-dstagram(작성중) (0) | 2020.02.03 |
---|---|
파이썬에 대한 기본 중 기본 배경지식 집합 (0) | 2020.01.27 |
[python] .join() (0) | 2020.01.13 |
[python] 파이썬의 실수 표현 문제 (부동 소수점) (0) | 2020.01.12 |
django 공부 도중 모르는거 검색한 내용+ 기억하기 위한 기록(1): 투표 사이트 튜토리얼 (0) | 2020.01.11 |