관리 메뉴

A seeker after truth

django 공부 도중 모르는거 검색한 내용 + 기억하기 위한 기록(3)-dstagram(작성중) 본문

Programming Language/Python

django 공부 도중 모르는거 검색한 내용 + 기억하기 위한 기록(3)-dstagram(작성중)

dr.meteor 2020. 2. 3. 11:11

* 본문은 <django로 쉽게 배우는 배프의 오지랖: 파이썬 웹 프로그래밍>(2019, 디지털북스, 배프)를 공부하면서 기록한 내용입니다.

 

1. 내용 검색/기록

1) from django.contrib.auth.models import User  - User의 정체?

=> 장고에서 계정을 관리하는 단위에 해당한다.

참고: https://velog.io/@ground4ekd/django-auth

https://docs.djangoproject.com/en/3.0/topics/auth/

 

2) on_delete 인수

예전부터 자주 봐왔던 이것!

class Photo(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_photos')

- 여기서 on_delete는 연결된 모델이 삭제될 경우 현재 모델 값은 어떻게 할것인지 정하는 부분 맞음. cascade(연결된 객체가 지워지면 해당 하위 객체도 같이 삭제), protect(하위 객체가 남아 있다면 연결된 객체가 지워지지 않음), set_null(연결된 객체만 삭제하고 필드값을 Null로 지정), set_default(연결된 객체만 삭제하고 필드 값을 설정된 기본 값으로 변경), set()(연결된 객체만 삭제하고 지정한 값으로 변경), do_nothing(아무일도 하지 않음)

- related_name은 연결된 객체에서 하위 객체의 목록을 불러올 때 사용할 이름. 포토 모델을 예로 들면 어떤 유저가 작성한 글을 불러올 때 유저 객체에 user_photos 속성을 참조하면 된다 (이 부분은 지금 이해가 안되서 일단 책의 문장 그대로 갖고와봤음)

 

3) 지금까지 봤던 startapp polls/bookmark/photo 이거 다 원래 장고에 있는 기능인거같아...그러지 않고서야 직접 지정하지도, 프로그램하지도 않은 저 많은게 다 나올리가 없단 생각이 들어... 후에 찾아볼 것.

어쨌든 여기서는 startapp photo 하면, photos 란 폴더가 생기고 그 밑에 연/월/일 순으로 하위폴더가 계속 생겨서 admin 사이트로 들어가서 직접 add한 사진이 저장된다. 그러나 사진의 양이 많아지면, 폴더가 너무 많이 생길 것이므로 이걸 수정하고자 한다면 어떻게 하면 될까?

답은 settings.py 파일에 MEDIA_ROOT/URL을 설정하는 것에 있다. 그렇게 하고 프로젝트 루트 밑에 media 폴더 설정 시 어떤 앱에서 업로드를 하더라도 이 폴더 밑에 각 앱 별로 폴더를 만들고 파일을 업로드하게 된다.

MEDIA_URL은 STATIC_URL처럼 파일을 브라우저로 서빙할 때 보여줄 가상의 URL이다. 가상 URL은 여러 편의 기능이 있지만 보안을 위해서도 필요한 기능이다. 이 가상 URL을 사용하면 서버 내부 폴더 구조를 숨길 수 있기 때문에 해커에게 정보를 적게 노출할 수 있다.

코드는 아래와 같다.

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

앞서 북마크 만들기의 마지막 부분에서 했던 정적 파일 로드 방법을 포함하여 지금까지 기술한 내용이 아래 링크에 일목요연하게 나와있다.

https://docs.djangoproject.com/en/3.0/howto/static-files/

 

4) admin.ModelAdmin

관리자 사이트에서 보이는 목록 화면을 커스터마이징할 수 있는 옵션 클래스를 만드는 이 기능에 대한 설명은 코드에, 부가적 설명은 아래 링크에 나와있다.

https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#modeladmin-options

 

5) 파이썬은 다중 상속이 가능하다.

파이썬과 c++은 가능, 자바와 C#은 불가능하다.

다중상속은 상속 시 두개 이상의 클래스를 상속받는 것을 말한다.

출처ㅣhttps://wikidocs.net/16073

class Country:
    """Super Class"""
...생략


class Province:
    Province_list = []


class Korea(Country,Province ):
    """Sub Class"""
... 생략

장고 원래 코드(깃허브가면 있음) 뜯어보니까, 이게 밥먹듯이 나온다.

 

6) views.py 말고 photo/urls.py에 디테일 뷰 만드는 법

 

7) template 의 linebreaksbr 필터?

블로그 글 텍스트에서 행이 바뀌면 문단으로 변환하는 기능. 출처:https://tutorial.djangogirls.org/ko/django_templates/

 

8) 장고엔 로그인/아웃 기능이 이미 만들어져있다. 이 기능을 그대로 불러다 쓰면 된다.


2. html 문법

1) meta 태그

meta 태그는 해당 문서에 대한 정보인 메타데이터를 정의할 때 사용한다. 만약 name 속성이나 http-equiv 속성이 명시되었다면 반드시 content 속성도 함께 명시되어야 하며, 반대로 두 속성이 명시되지 않았다면 content 속성 또한 명시될 수 없다. HTML5에서는 <meta> 요소를 통해 웹 페이지에서 사용자가 볼 수 있는 영역인 뷰포트(viewport)를 제어할 수 있도록 name 속성에 viewport 속성값을 제공하고 있다.

출처: http://tcpschool.com/html-tags/meta

 

2) footer 태그

웹페이지 맨 밑에 보면 무슨 @copyright이나 powered by. ~ 이런거 있잖아?! 그거 말하는거임.

 

3) form 태그

사용자로부터 입력을 받을 수 있는 html 입력폼을 정의할 때 사용한다.


지금까지 잘 이해가지 않았던 부분은 장고 걸스 장고 튜토리얼 보니까 좀 이해가 되더라. div 안의 class는 css 선택자가 맞음. 장고걸스 튜토리얼 css 부분에도 나옴. 그리고 nav, navbar는 부트스트랩에 나오는 개념이었음. 아래 링크 참고

https://getbootstrap.com/docs/4.0/components/navbar/

뿐만 아니라 css 개념이기도 함.