on
[파이썬인강]6주차 django 프레임 워크, django view,settings,url...
[파이썬인강]6주차 django 프레임 워크, django view,settings,url...
django 장점
다양한 사용이 가능, 안전 , Shered-nothing Architecteure, 유지보수에 용이
프레임워크와 라이브러리 차이
Serving은 동일하지만 하는 주체가 django인지 코드인지에 따라 달라짐
장고의 구조
요청: 유저 → 웹서버 →urls.py → views →models (db)
응답: view → webserver → users
실습환경 구성하기
mkdir django cd django python3.8 -m venv myenv pip install django django-admin startproject shrinkers cd shrinkers
디렉터리 모습
실행시키기
python manage.py runserver
app 만들기
pyton manage.py startapp shortener
-----------------------------------------------------------------------------
DB모델링
사전에 속성데이터를 정의하는것
테이블을 미리 저장
컬럼타입
CharField 길이가 정해진 문자열 IntegerField -2147483648~2147483647 PositiveIntegerField BigIntegerField +- 9223372036854775808 PositiveBigIntgerField DataField 날짜 DatetimeField 날짜 ‣ BooleanFiield 참/거짓 TextField 길이가 정해지지 않은 문자열 EmailField 이메일포멧 JsonField json포멧 AutoField 자동 증가 BigAutoField 자동증가 ForeginKey
실습목표
해당 모델을 생성
mkdir django cd django python3.8 -m venv myenv pip install django django-admin startproject shrinkers cd shrinkers
컬럼 데이터
컬럼 데이터 pay_plan Foreign Key
컬럼 데이터 id BigInteger name CharField price IntgerField updated_at DataTimeField created_at DateTimeField
app의 models.py에
from django.db import models class PayPlan(models.Model): name=models.CharField(max_length=20) price=models.IntegerField() updated_at=models.DateTimeField(auto_now=True) created_at=models.DateTimeFIled(auto_now_add=True)
---- # 기본 DB 생성하기 --- python manage.py migrate python manage.py migrations --- admin 웹페이지 접속은 localhost:8000/admin python manage.py createsuperuser
-장애포인트
No Changes detected
이유: 이미 migrate를 했는데 재시도 할때 발생 → 변견된 부분이 없을 떄 일어난다.
하지만 나는 변경을 했고 이상하다 싶어 트러블슈팅
settings.py 파일에서 INSTALLED_APPS의 리스트에 프로젝트 이름 삽입
app의 migrate 디렉터리의 파일을 삭제
그리고 명령어 실행
python manage.py makemigrations [App_name] 프로젝트 이름을 넣어준다. python manage.py migrate [App_name]
DBMS툴
DBMS는 데이터베이스를 보기 편하게 테이블 형식으로 볼 수 있고, 수정, 삭제들을 손쉽게 해주는 툴이다.
그중 DBeaver라는 툴을 사용해보겠습니다.
DBeaver
mkdir django cd django python3.8 -m venv myenv pip install django django-admin startproject shrinkers cd shrinkers
다운로드는 그리 어렵지 않았고 실행을 하면 아래와 같다
본 프로젝트에서는 SQLite를 사용한다.
프로젝트 디렉터리에 접근
접근하면 해당 DB에 내용을 볼 수 있다.
--------
Git
Git:은 소스코드를 저장하여 협업을 할 수 있게 만들어 놓은 툴이다. 보통 Github라는 곳에 소스코드를 올려 저장하고 다양한 기능을 추가하거나 테스트할 때 가지(branch)를 새로 만들어 진행한다.
다운로드
https://git-scm.com/
소스코드 받아오기
git clone https://github.com/riseryan89/shrinkers.git
소스코드를 받아 와서 볼 수 있고, 최신이라 이전의 commit(등록)의 코드를 보고싶다면
눌러 이전 버전의 값을 가져온다.
명령어는
git reset --hard 59ef0a7₩~~~~~
장애포인트
ERRORS: auth.User.groups: (fields.E304) Reverse accessor for 'auth.User.groups' clashes with reverse accessor for 'shortener.Users.groups'. HINT: Add or change a related_name argument to the definition for 'auth.User.groups' or 'shortener.Users.groups'. auth.User.user_permissions: (fields.E304) Reverse accessor for 'auth.User.user_permissions' clashes with reverse accessor for 'shortener.Users.user_permissions'. HINT: Add or change a related_name argument to the definition for 'auth.User.user_permissions' or 'shortener.Users.user_permissions'. shortener.Users.groups: (fields.E304) Reverse accessor for 'shortener.Users.groups' clashes with reverse accessor for 'auth.User.groups'. HINT: Add or change a related_name argument to the definition for 'shortener.Users.groups' or 'auth.User.groups'. shortener.Users.user_permissions: (fields.E304) Reverse accessor for 'shortener.Users.user_permissions' clashes with reverse accessor for 'auth.User.user_permissions'. HINT: Add or change a related_name argument to the definition for 'shortener.Users.user_permissions' or 'auth.User.user_permissions'.
해결방법
AUTH_USER_MODEL= 'shortener.Users' #AUTH_USER_MODEL 을추가
장애포인트
마이그레이션과 마이그레이트 시도 중에 마이그레이션은 성공 했으나 마이그레이트는 되지 않고 ValueError가 떴다. ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'accounts.account', but app 'accounts' doesn't provide model '
해결방법
migrate 디렉터리에 db파일삭제
-----------------------------------------------------------------------------------------------
Django ORM
프론트 엔드는 한번에 db에 값에 한번에 접속 할 수 없다 .
그래서 백엔드를 통해 접근을 한다.
ORM이란
orm은 객체 -관계 매핑
python 객체와 db 연결
쿼리를 자동으로 생성
데이터베이스 안의 데이터가 python object로 매칭
객체를 통해 간접적으로 데이터베이스 데이터 헨들링
django orm,sql alchemy pony
장점 단점 직관적 raw 쿼리가 필요한 구간이 반드시 있다 sql 학습시간보다 business logic에 집중할 수 있다. 프로젝트의 복잡도가 올라가면 난이도가 높아진다 가독성 프로시저 사용이 수월하지 않다. 코드재사용 유지보수 수월 dbms종속성이 줄어든다 sql injection을 막아준다.
장고 디버그 툴
requirements.txt #안에 설치할 내용의 패키지와 버전을 넣는다 .
appdirs==1.4.4 asgiref==3.3.4 black==21.4b click==7.1.2 Django==3.2 django-debug-toolbar==3.2.1 django-ninja==0.13.0 djangorestframework==3.12.4 mypy-extensions==0.4.3 pathspec==0.8.1 pydantic==1.8.2 pytz==2021.1 regex==2021.4.4 sqlparse==0.4.1 toml==0.10.2 typing-extensions==3.10.0.0
설치
pip install -r requirements.txt
설정 값들(settings.py)
INSTALLED_APPS 에 "debug_toolbar" 추가 INTERNAL_IPS 에 툴바 아이피 적용 MIDDLEWARE에 debug_toolbar.middleware.DebugToolbarMiddleware 추가
from http://base-on.tistory.com/441 by ccl(A) rewrite - 2021-12-20 15:01:29