KT AIVLE/AI Track(교육)
[AI] KT AIVLE(KT 에이블스쿨) 3기 AI 개발자 트랙 Django APP만들기, ORM, Model -15주차-
머준
2023. 5. 25. 23:16
[ Visual Studio Code cmd 명령어로 APP 만들기 순서 ]
1. 프로젝트 만들기 & 이동
django-admin startproject mysite
cd mysite
2. 앱 생성
python manage.py startapp myapp
3. DB 초기화 & 마이그레이션
python manage.py makemigrations
python manage.py migrate
4. super user 생성
python manage.py createsuperuser
5. 실행
python manage.py runserver
6. 앱 추가
python manage.py startapp 앱이름
7. templates 생성
8. setting에 app 추가
9. main urls에 include()로 app urls 참조하게끔 설정
ex) path('blog/', include('blog.urls'))
10. 링크 연결 (URL과 함수 연결)
11. db만들기
python manage.py makemigrations blog
python manage.py migrate blog
12. 만든 app의 model.py에 class 추가
class Post(models.Model):
title = models.CharField(max_length= 100)
content = models.TextField()
created_at = models.DateField(auto_now_add= True)
published_at = models.DateField(null= True)
13. 만든 class를 admin 페이지에서 보고 싶으면 admin.py에 다음 코드 추가
from . import models
admin.site.register(models.Post)
14. 만든 앱에 templates/blog/index.html 생성
# blog views.py
def index(req):
posts = models.Post.objects.all()
return render(req, "blog/index.html", {
'post_list': posts
})
def detail(req, id):
post = models.Post.objects.get(id=id)
return render(req, "blog/detail.html", {
'post': post
})
# blog urls.py
urlpatterns = [
path('', views.index),
path('<id>/', views.detail)
]
# index.html
<h1>블로그 목록 보기</h1>
<ul>
<li>
{ % for p in post_list % }
<a href = "/blog/{{p.id}}">{{id}}. {{title}}</a>
</li>
</ul>
# detail.py
<h1>{{post.title}}</h1>
<small>{{post.published_at}}</small>
<a>{{post.content}}</a>
[ ORM (Object-Relational Mapping) ]
- ORM
: DB 작업을 보다 편하게 해줌 -> 유지보수 편의성 증가
DBMS에 대한 의존도가 낮아짐
보안 강화 -> SQL 삽입 공격 예방
1. 라이브러리 설치
pip install django-extensions
2. settings.py에 INSTALLED_APPS 등록
INSTALLED_APPS = [
'django_extensions' ,
]
3. django shell 진입
python manage.py shell_plus
# 모든 사용자 가져오기
all_users = User.objects. all()
# 사용자 이름으로 특정 사용자 가져오기
user = User.objects.get(username= 'exampleuser' )
# 권한 정보
user변수.get_user_permisson()
# 새로운 사용자 생성하기
new_user = User.objects.create(
username= 'exampleuser' ,
password= 'examplepassword' ,
email='example@example.com' )
new_user.save()
# 사용자 정보 업데이트하기
user = User.objects.get(username= 'exampleuser' )
user.email = 'newemail@example.com'
user.save()
# 사용자 삭제하기
user = User.objects.get(username= 'exampleuser' )
user.delete()
[ Class ]
- Class
: 캡슐화, 다형성, 상속을 이용하여 코드 재사용 증가시키고 유지보수를 효율적으로 할 수 있게 객체들을 연결시켜 프로그래밍 하는 것
[ 모델 만들기 ]
: blog - models.py에 만들어둔 클래스를 makemigrations를 통해 initial 파일을 만들고 migrate를 하면 blog_클래스 처럼 db에 추가되어짐
1. model.py에 만들고자 하는 테이블을 Class로 작성하기
ex)
class Post(models.Model):
title = models.CharField(max_length= 100)
content = models.TextField()
created_at = models.DateField(auto_now_add= True)
published_at = models.DateField(null= True)
2. Model의 변화를 감지하기 위해 새로운 migration 파일 만듦
python manage.py makemigrations APPNAME
3. migration 적용. DB의 테이블 스키마 및 데이터 조정
python manage.py migrate blog
- field 종류
1. CharField: 문자열 필드. max_length로 최대 길이를 지정
2. TextField: 긴 텍스트 필드. 최대 길이를 지정할 필요 없음
3. IntegerField: 정수 값 필드
4. DateField: 날짜 필드. auto_now_add, auto_now를 사용하여 현재 날짜 자동 저장.
5. ForeignKey: 관계형 필드. 일대다 관계 형성. 연결하려는 모델을 매개 변수로 받음.
6. ManyToManyField: 관계형 필드. 다대다 관계를 형성. 연결하려는 모델을 매개 변수로 받음
- 장고 페이지에서도 추가된 테이블을 보고 싶다면 model.py에 다음 코드 추가
from . import models
admin.site.register(models.ClassName)
[ model.py로 만들어진 테이블 검색 ]
1. django shell 진입
python manage.py shell_plus
2. 클래스이름.objects.all()
ex)
student와 course는 다대다 구조.
단, student엔 course 필드가 없지만, course엔 student 필드가 있음
s = Student.objects.get(name = ‘형준’)
# Student에는 course 필드가 없기 때문에 course_set으로 검색
s[0].course_set.all()
c = Course.objects.get(title = ‘자바’)
c[0].students.all()
c[0].stuedents.filter(year__gt = 2000)