20 Jan 2020
|
django
python
goormedu의 초보자를 위한 장고 뿌시기 를 보고 공부한 것을 정리합니다.
웹사이트 운영을 하다 보면 쌓이게 되는 많은 데이터
이러한 많은 데이터들을 관리하기 위해 관리자 페이지가 필요!
CRUD, 데이터 검색 및 필터링….
장고에서는 코드 몇 줄만 입력하면 쉽게 사용할 수 있는 관리자 페이지를 기본적으로 제공!
기본주소(도메인)/admin -> 관리자페이지 url로 접속 하게 되면 로그인 창이 뜬다! 접속하기 위해 super user를 만들어 주어야 한다.
python manage.py createsuperuser
를 터미널에 입력하고 ID, email, password를 설정하면 슈퍼유저가 생성된다.
이렇게 들어가게 되면 기본적으로 User, Group의 테이블이 존재한다. 이는 장고에서 기존에 만들어놓은 model들. 우리가 만들었던 post table을 관리자 페이지에서 관리 가능하게 하려면 post 폴더의 admin.py
에서
from django.contrib import admin
from .models import Post
admin . site . register ( Post )
현재 모듈(파일)에서는 Post 모델을 찾을 수 없기 때문에 import 필요
. : 같은 경로를 의미
-> .models
: 같은 경로의 models에서
관리자 페이지 커스터마이징
from django.contrib import admin
from .models import Post
@ admin . register ( Post )
class PostAdmin ( admin . ModelAdmin ):
list_display = (
'id' ,
'title' ,
'content' ,
'view_count' ,
'created_at' ,
'updated_at'
)
search_fields = (
'title' ,
)
list_display
: tuple 형태로 관리자 페이지에서 보여주고 싶은 컬럼을 설정. 보통 콤마 단위로 줄바꿈해서 코딩
search_fields
: tuple 형태로 검색 가능하도록 하는 컬럼을 설정. 반드시 마지막에 콤마를 써야 한다.
list_filter
: Admin 사이트에 필터를 활성화할 항목을 설정하는 옵션
Date range filter 옵션 DateField를 list_filter 옵션에 추가하면 기본적으로 제공되는 필터링 옵션은 다음 4가지 항목 : Today, Past 7 days, This month, This year
그러나 현실에서는 날짜의 범위를 지정하여 필터링하는 경우가 더 많기 때문에, 기간 설정 필터링을 지원하는 패키지를 설치하여 사용하면 된다. django-admin-rangefilter와 같은 다양한 date range filter 패키지가 있다.
설치 방법은 command창의 pip를 이용하여 패키지를 설치한 후 INSTALLED_APPS에 추가하면 설치 완료.
$ pip install django-admin-rangefilter
#settings.py
INSTALLED_APPS = (
...
'rangefilter',
...
)
from django.contrib import admin
from rangefilter.filter import DateRangeFilter , DateTimeRangeFilter
from .models import Post
@ admin . register ( Post )
class PostAdmin ( admin . ModelAdmin ):
list_display = (
'id' ,
'title' ,
'content' ,
'view_count' ,
'created_at' ,
'updated_at'
)
list_filter = (
( 'created_at' , DataRangeFilter ),
)
list_display_links
: 목록 내에서 링크로 지정할 필드 목록 (이를 지정하지 않으면, 첫번째 필드에만 링크가 적용)
CRUD 가능
References
20 Jan 2020
|
django
python
goormedu의 초보자를 위한 장고 뿌시기 를 보고 공부한 것을 정리합니다.
처음으로 프로젝트를 생성하면 아래와 같은 파일 구조가 만들어진다. 프로젝트명은 MyFirstDjango로 설정하였다.
MyFirstDjango
|_ MyFirstDjango
|_ __init__.py
|_ settings.py
|_ urls.py
|_ wsgi.py
|_ manage.py
__init__.py
: python ver 2대에서 패키지임을 알려주는 모듈
settings.py
장고의 설정 파일. 중요!
조금만 설정하면 어려운 기능도 쉽게 구현할 수 있게 해 준다.
INSTALLED_APPS
: 어떤 앱들이 설치되어 있는지
DATABASE
: 기본은 sqlite3 (보통 로컬 환경에서 작동하며, 실제 서비스 운영에는 부적합)
urls.py
: application의 경로 설정
urlpatterns = [
path ( 'admin/' , admin . site . urls ),
]
wsgi.py
: web server gateway interface -> Nginx 등의 웹 서버와 장고 어플리케이션을 연결해주는 파이프라인 같은 것
manage.py
: 다양한 명령어를 장고에서 실행할 수 있도록 해 준다.
실행을 누르면
python3 /workspace/MyFirstDjango/manage.py migrate && python3 /workspace/MyFirstDjango/manage.py runserver 0.0.0.0:80
의 명령어가 실행된다.
장고에서의 모델링
models.py에서 모델링
python manage.py makemigrations로 주문서를 만든다 : migration은 생성될 테이블 정보를 담은 주문서 cf) 테이블 : 모델의 설계를 그대로 데이터베이스에 저장한 형태
python manage.py migrate로 주문서 내역대로 테이블 생성 (실제 데이터베이스에)
서버는 control+c로 종료
python manage.py startapp 앱이름 으로 앱을 생성
python manage.py startapp posts
cf) tab으로 자동완성 가능 하고 엔터를 누르면posts
라는 폴더가 생성된다.
posts
|_ migrations
|_ __init__.py
|_ admin.py
|_ apps.py
|_ models.py
|_ tests.py
|_ views.py
|_ manage.py
admin.py
: 관리자 페이지를 설정
tests.py
: 테스트 진행
view.py
: 요청을 받고 응답을 주는 곳
즉, MTV를 조작할 수 있는 부분이 생성된다!
한편 이 후에 INSTALLED_APPS에서 posts가 설치되었다는 것을 알려주어야 한다.
INSTALLED_APPS = [
'django.contrib.admin' ,
'django.contrib.auth' ,
'django.contrib.contenttypes' ,
'django.contrib.sessions' ,
'django.contrib.messages' ,
'django.contrib.staticfiles' ,
'posts' ,
]
그렇지 않으면 python manage.py migrate
명령어를 실행했을 때 No change detected 가 출력된다. 즉, 장고에서 posts app의 존재를 알 수 있도록 해 주어야.
posts에서 models.py
에 모델을 생성해준다. model은 장고에서 class의 개념!
from django.db import models
class Post ( models . Model ):
title = models . CharField ( max_length = 200 )
content = models . TextField ()
view_count = models . IntegerField ( default = 0 )
created_at = models . DateTimeField ( auto_now_add = True )
updated_at = models . DateTimeField ( auto_now = True )
auto_now_add
: 자동으로 현재 시간이 입력됨
auto_now
: 자동으로 생성 혹은 수정될 때의 현재 시간이 입력됨
INSTALLED_APPS
에 추가하고, python manage.py makemigrations
명령어를 실행하면
Migrations for 'posts':
posts/migrations/0001_initial.py
- Create model Post
-> posts를 위한 주문서가 ‘0001_initial.py’로 생성되었다!
해당 파일에 들어가 보면
# Generated by Django 2.2.4 on 2020-01-13 05:40
from django.db import migrations , models
class Migration ( migrations . Migration ):
initial = True
dependencies = [
]
operations = [
migrations . CreateModel (
name = 'Post' ,
fields = [
( 'id' , models . AutoField ( auto_created = True , primary_key = True , serialize = False , verbose_name = 'ID' )),
( 'title' , models . CharField ( max_length = 200 )),
( 'content' , models . TextField ()),
( 'view_count' , models . IntegerField ( default = 0 )),
( 'created_at' , models . DateTimeField ( auto_now_add = True )),
( 'updated_at' , models . DateTimeField ( auto_now = True )),
],
),
]
id
: autofield (자동으로 생성되는 필드), 기본키
그리고 python manage.py migrate
명령어를 터미널에 실행시키면 DB에 테이블 형태로 Post가 생성된다! 해당 테이블은 python shell에서 확인할 수 있다. 터미널에 python manage.py shell
을 입력하면 shell을 이용할 수 있다.
먼저 import를 해 줘야 한다.
In [ 1 ]: from posts.models import Post
In [ 2 ]: Post . objects . create ( title = "간장게장 담그는 법" , content = "알이 꽉 찬 꽃게를 간장에 담근다." )
Out [ 2 ]: < Post : Post object ( 1 ) >
In [ 3 ]: Post . objects . all ()
Out [ 3 ]: < QuerySet [ < Post : Post object ( 1 ) > ] >
Post.objects.all()
== Select * From Post
In [ 4 ]: post = Post . objects . get ( id = 1 )
In [ 5 ]: post . title
Out [ 5 ]: '간장게장 담그는 법'
In [ 6 ]: post . content
Out [ 6 ]: '알이 꽉 찬 꽃게를 간장에 담근다.'
In [ 7 ]: post . view_count
Out [ 7 ]: 0
In [ 8 ]: post . created_at
Out [ 8 ]: datetime . datetime ( 2020 , 1 , 13 , 5 , 48 , 3 , 723162 , tzinfo =< UTC > )
위와 같이 모든 attribute를 확인할 수 있다!
20 Jan 2020
|
daybyday
junior
를 9월 10일 오후 11:57분에 쓴다.
다 쓰면 9월 11일이 되어 있을 것이다.
지키지 못한 계획
2020년 6월 1일의 나는 스케줄러에 다음과 같은 계획을 적어 넣었다.
쓰려고 했던 시도가 없었던 것은 아니나, 결국 쓰지 못했고 올라가지 않았다.
그 뒤로 많은 계획들이 비슷한 길을 걸었다.
5월
드디어 취직을 했다.
SM 부서에 배정되었다.
SM 부서에서 무슨 일을 하는지에 대해 몰랐던 것은 아니나, 그 당시의 나는 무슨 일이든 일단 해 보고 싶었다. 실제로 어떤 방식으로 업무가 진행되는지 궁금했다.
무슨 일을 했나?
Java 백엔드, 거기에 더해 SAP 유지보수 및 신규 프로그램 개발
가끔 데이터 추출
주로, 단순 문의 혹은 에러 문의의 원인 파악 및 해결 및 그에 따른 전화 혹은 답신
그래서 계획은 왜 못 지켰나?
해이해졌다.
회사를 다니기 시작하면서 체력이 떨어진 것도 사실이나 시간은 만들려면 얼마든지 있었다.
통장에 찍히는 월급 앞에 가장 큰 목표가 흐릿해졌다.
갑자기 왜 이제와서 회고를 쓰나?
시간은 돌릴 수 없기에 앞으로 나아가기 위해.
오늘 강의를 들으면서 내가 그동안 공부했던 것들이 어디 가지 않았구나 하는 생각을 했다. 동시에 짧은 시간이었지만 녹슬었구나, 라고도 생각했다. 나는 공부를 할 때 의미있다고 느끼는구나, 나의 효용감을 느끼는구나.
배우는 것이 좋다. 정체되어 있는 것은 싫다. 게임할 때도 이 시간에 내가 공부하고 있었다면 이라고 자꾸 생각하게 된다.
이제부터는 간단하다. 하고 싶으면 하면 된다.
구체적으로 뭐가 하고 싶고, 무엇을 해야 하나?
하고 싶은 것: 주니어개발자로서 성장하기
되고 싶은 나: 어떤 일을 하더라도 (개발과 무관하더라도) 항상 더 공부하는 사람. 자만하거나 정체되어 있지 않은 사람
그러기 위해서 해야 하는 것
지금 하고 있는 공부 마무리 (시작해놓은 것은 끝내 놓자)
인프런 함수형 자바스크립트 강의
리액트 책
리액트 인프런 강의
코딩테스트 준비
3. 추가 공부
모던 JS
CSS-네이버 부트클래스
HTML
브라우저, 웹
4. 작은 프로젝트라도, 제대로 시작해서 끝을 보기
계획을 구체화하면서 오랜만에 timetable을 짰다.
꼭 해야 하는 것: YIL 쓰기
왜 TIL이 아니라 YIL을 쓰는가
11:30분 이전에는 반드시 취침하기로 했다. 그러려면 공부를 다 하고 난 뒤 TIL을 쓸 시간이 빠듯하다.
차라리 자고 일어나서 아침에 복기하면서 YIL을 쓰는 것이 공부 효율 면에서도 좋을 것이라 생각했다.
일단 당장 내일부터 해 보고, 차후 수정될 수 있다.
YIL은 기존 TIL 폴더에 작성한다.