Server 38

[Django] User model 확장

Reference https://yonghyunlee.gitlab.io/python/user-extend/ django login 유저 확장 방법 - 김땡땡's blog 장고의 auth 기능은 User 객체를 제공한다. 우리는 기본 default로 이 User 객체로 여러 인증을 구현할 수 있다. User model User model의 기본적으로 있는 여러 필드들이 있다. username 필수사항이다. 150자 이 yonghyunlee.gitlab.io https://github.com/dev-yakuza/django_custom_user_model GitHub - dev-yakuza/django_custom_user_model Contribute to dev-yakuza/django_custom_us..

Server/Django issue 2022.08.04

[Django] mysql 로그인 오류 해결방법

https://2vup.com/mysql-password/ [mySQL8] 로그인 오류 해결방법 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) / ERR 🔒 mysql 비밀번호 재설정 ❌ 오류 mysql에서 옳은 비밀번호를 입력했음에도 불구하고 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES) 오류를 마주했다. mysql> UPDATE user set password=passwor 2vup.com

Server/Django issue 2022.08.04

[Django] mysqlclient 설치 에러 해결

macOS 환경에서 pip install mysqlclient를 실행할 경우 설치에러가 발생하는 경우가 존재한다. 해결 방법은 간단하다. brew install mysql 을 진행하고 pip install mysqlclient 를 실행하면 정상적으로 설치된다. $ brew install mysql $ pip install mysqlclient + 추가 우분투 linux 에서 pip mysqlclient 설치 해결 https://hongjuzzang.github.io/howto/install_mysql_ubuntu/ [Ubuntu 18.04] mysqlclient install Ubuntu 18.04에서 mysqlclient 설치 오류 해결하기 hongjuzzang.github.io

Server/Django issue 2022.08.04

[Django] Git 초기화 & Github 연결

Git 초기화 git을 이용하여 관리할 수 있도록 초기화 한다. manage.py가 있는 디렉토리에서, git init으로 git을 초기화 시킨 다음에 .gitignore 파일을 먼저 작성한다. .gitignore 앞서 생성하였던 my_settings.py와 같이 공유하면 안되는 것들을 구분하기 위해 .gitignore파일을 만들어 관리하는 것이다 먼저, gitignore사이트 에 접속하여 아래와 같은 키워드들을 추가하고 Create 를 한다. || python, pycharm, VisualStudioCode, vim, macOS, Linux, zsh... || 그리고 그 내용들을 .gitignore 파일을 열어서 내용를 추가하고 my_setting.py 파일도 추가한다. #################..

Server/Django issue 2022.08.03

[Django] Project 초기 세팅

프로젝트 셋팅에 대한 자료가 방대해서 싹다 모아보여 한다. 가상 환경 추가 및 적용 (Mac 적용: source venv/bin/activate, Mac 해제: venv/bin/deactivate) Django 설치 다음과 같이 업데이트가 가능하다면 pip와 setuptools를 업데이트 한다. # pip를 최신 버전으로 업데이트 $ python -m pip install --upgrade pip # setuptools를 최신 버전으로 업데이트 $ pip install --upgrade setuptools # 해당 가상 환경에 장고 설치 $ pip install django $ pip install django=원하는버전 폴더 하나 생성: DjangoProject 그 안에, django-admin sta..

Server/Django issue 2022.08.03

[Django] migration 파일은 커밋 되어야 하는가?

마이그레이션 파일을 다루는 절대 원칙 이미 커밋된 마이그레이션 파일은 지우면 안 됩니다. 위와 같은 이유로 .gitignore에 포함시키지 않고 코드 저장소(Github)에 업로드하여 관리합니다. 코드 저장소에 올리기 전에 혹은 프로덕션에 반영하기 전에 문제가 없는지 확인합니다. 왜 지우면 안 되나요? 디비를 모두 날렸어도 처음부터 끝까지 마이그레이션 파일을 실행했을때 날리기 전의 디비의 스키마를 그대로 복구할 수 있어야만 완전한 마이그레이션 파일입니다. 그런 상태일때만 여러분 각자의 로컬 디비가 서로 같은 상태를 유지하며 개발되고 있음을 보장할 수 있기 때문입니다. 그래서 마이그레이션 파일은 디비에 변경점을 가하기 위한 도구라기보단 디비의 변경점을 기록해두는 커밋 로그처럼 다뤄야 합니다. 가끔 심각하게..

Server/Django issue 2022.08.02

[Django] Reverse relations과 Related_name

1:N 이나 N:M 관계가 성립할 때, 우리는 역참조를 할 수 없다. 하려면 classname_set을 이용해서 접근할 수 있는데 이때 이름을 지정하는 것이 related_name이다. related_name가 필수인 경우가 존재하고, 그것은 정확히 어떤 field를 갖고 와야하는지 명확하지 않을때이다. 앞으로 프로젝트가 커지면 1:N이나 N:M 관계를 갖는 테이블이 많이 생긴다. 이때, related_name는 이를 해결해 줄 대표적인 방법이다. https://velog.io/@gillog/DB-11-1N-NM-관계 [DB] 1:1, 1:N, N:M 관계 관계형 데이터베이스(Oracle, MySQL, MS-SQL, SQLite 등등)는 엔티티끼리 관계를 맺을 수 있어서 관계형 DB라는 이름이 붙었다.엔..

[Django] DRF Pagination

실제 서비스의 경우에는 레코드의 개수가 많을 것이고 이 경우 하나의 API 요청으로 모든 레코드를 받는 것은 오랜 시간이 걸리게 됩니다. 따라서 이런 경우 페이지를 나눠서 요청을 해야합니다. 다행히도 DRF 에서는 이러한 pagination 기능을 제공하고 있습니다. PageNumberPagination 과 LimitOffsetPagination pagination 을 하는데는 크게 두 가지 방법이 있습니다. 두 방법 모두 url 의 get parameter 를 이용하여 이를 지원해줍니다. 각각에 대해 알아보도록 하겠습니다. PageNumberPagination page : 몇 번째 페이지인지 표시해줍니다. 페이지는 1부터 시작합니다. page_size : 한 페이지에 몇 개의 레코드를 보여줄지 표시해줍..

[Django] django-rest-knox 란?

django-rest-knox django-rest-knox는 장고(django)의 rest 인증 모듈입니다. Knox는 Django REST Framework의 인증을 보다 쉽게 사용할 수 있도록 도와줍니다. 작은 노력으로 REST 기반의 애플레이션에서 공통적으로 사용하는 패턴을 따르며 안전한 연결을 구성할 수 있는 것이죠. Knox의 인증은 DRF에 내장된 TokenAuthentication과 흡사하게 토큰 기반으로 작동하면서, 기본 DRF이 가지고 있는 몇 가지 문제들을 보완해 줍니다. DRF 토큰은 단일 사용자로 제한되어 있습니다. 이런 제약사항은 토큰이 공유되거나, 여러 기기에서 안전한 연결을 어렵게 만듭니다. 또 서버 측에서 로그아웃될 경우 모든 기기에서 로그아웃되어 버리기도 합니다. Knox..

13. Django order app 주문정보 조회하기

이제 주문정보 조회하는 것을 list로 만들어 보겠다. 즉, ListView를 사용할 것이다. 그 말은 페이지를 만든다는 의미이고 그로 인해 평소에 하던 순서를 반복하겠다. 목차 1. templates ( order.html ) 2. views.py ( class OrderList ) 3. urls.py ( "order/" ) ★ 4. 문제점 발생!! --> 해결 : QuerySet ★ 5. 결과확인 1. templates ( order.html ) 모델을 참고하여 템플릿에서 표시할 정보들을 수정할 것이다. head 에는 상품명, 수량, 주문날짜를 표시하고 body에는 DB에 저장된 순서(주문순서), 상품명, 수량, 등록날짜만 표시하도록 하자. 2. views.py ( class OrderList ) 이..

12. Django order app 상품 주문하기 (2)

지난 수업에 이어 상품주문하기 2편이다!!! 이번엔 좀 어렵다잉!! 가즈아!! 목차 : 1. request.session 2. db.transaction 3. 결과 확인 1. request.session (1) 이제 해당 주문으로 인해 수량이 감소하는 것을 DB에 저장하도록 하는 코드를 작성할 것이다 . # 이제 사용자 정보를 들고와야한다. # session을 가져오려면 form 안에서 request.session에 접근할 수 있어야 하는데 # 현재는 접근할 수 없다. session에 접근할 수 있도록 form을 변경할 것이다. 여기서 DB에 데이터를 저장하는 save()의 경우 어느 파일에서 하든 상관없지만, FormView의 경우 값을 form으로 입력받으면, 그 값을 DB에 넣는 작업또한, 해당 f..

11. Django order app 상품 주문하기 (1)

이번 파트는 많은 내용을 담고 있기에 2편으로 나누어 진행하였다. 지금까지 만든 shopuser(유저), product(물건) app을 구현하였다. 이제 해당 유저가 이 쇼핑몰에서 물건을 사게 되는 경우 이루어지는 기능을 구현한다. 이번엔 기능 별로 목차를 나눌 것이다. 파일을 여기저기 왔다갔다 할꺼니깐 잘따라와!! 가즈아!!!!!!!!!!!!!!!!!!!!!!!!! 목차 : 1. forms.py 2. views.py 3. FormView( order/views.py ) , urls.py 4. template 수정 ( product_detail.html ) 5. 문제점 1. forms.py 주문하기의 경우 주문하는 페이지를 별도로 만들지 말고, 상품 상세페이지(product_detail.html)에서 수..