본문 바로가기
프로그래밍/Python & Django

[파이썬인강]6주차 django 프레임 워크, django view,settings,url,templates 파일

by Cloud_Park 2021. 12. 20.

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

 

DBeaver Community | Free Universal Database Tool

DBeaver Universal Database Tool Free multi-platform database tool for developers, database administrators, analysts and all people who need to work with databases. Supports all popular databases: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase,

dbeaver.io

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 추가