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라는 툴을 사용해보겠습니다.
mkdir django
cd django
python3.8 -m venv myenv
pip install django
django-admin startproject shrinkers
cd shrinkers
다운로드는 그리 어렵지 않았고 실행을 하면 아래와 같다
본 프로젝트에서는 SQLite를 사용한다.
프로젝트 디렉터리에 접근
접근하면 해당 DB에 내용을 볼 수 있다.
--------
Git
Git:은 소스코드를 저장하여 협업을 할 수 있게 만들어 놓은 툴이다. 보통 Github라는 곳에 소스코드를 올려 저장하고 다양한 기능을 추가하거나 테스트할 때 가지(branch)를 새로 만들어 진행한다.
다운로드
소스코드 받아오기
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 추가
'프로그래밍 > Python & Django' 카테고리의 다른 글
[파이썬인강]8주차 Rest API 및 Serializer 마지막 후기 (0) | 2022.01.04 |
---|---|
[파이썬인강]7주차- 스타일링, Session, GCP, 배포 / 프로젝트 구성 (0) | 2021.12.27 |
[Python & Django] HTML /CSS 실습환경 (0) | 2021.12.13 |
[파이썬인강]5주차- 웹 & 프론트엔드 기본(html, css) (0) | 2021.12.13 |
[파이썬인강]4주차 클레스와 객체 ,상속, 데이터베이스, 정규표현식, 스레드 (0) | 2021.12.07 |