Django / 데이터 추가/수정/삭제 / HTML / ORM(정규표현식) / 쿼리셋
Web/Django

Django / 데이터 추가/수정/삭제 / HTML / ORM(정규표현식) / 쿼리셋

뉴비뉴 2019. 6. 29.

Django는 관리자페이지를 제공한다.

 

localhost:8000/admin

 

유저 생성

-python manage.py createsuperuser

 

추가

추가하고싶은 프로젝트의 admin.py에다가

from .models import Post # Post의 models 정보를 가져와서

admin.site.register(Post) # admin 사이트에 등록을 해준다.

Django URLs

 

Django는 URLconf (URL configuration) 를 사용한다. URLconf는 장고에서 URL과 일치하는 뷰를 찾기 위한 패턴들의 집합입니다.

 

mysite/urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

정규표현식(Regex)

  • ^ : 문자열이 시작할 때
  • $ : 문자열이 끝날 때
  • \d : 숫자
  • o : 바로 앞에 나오는 항목이 계속 나올 때
  • () : 패턴의 부분을 저장할 때

View

뷰(View)는 애플리케이션의 "로직"을 넣는 곳이다. 뷰는 이전 장에서 만들었던 모델에서 필요한 정보를 받아와서 템플릿에 전달하는 역할을 한다. 

#blog/views.py

def post_list(request):
    return render(request, 'blog/post_list.html')
    
# post_list라는 함수를 만들어 요청을 넘겨받아 render 메서드를 호출합니다.
# 이 함수는 호출하여 받은(return) blog/post_list.html 템플릿을 보여준다.

템플릿

템플릿이란 서로 다른 정보를 일정한 형태로 표시하기 위해 재사용 가능한 파일을 말한다.

예를 들면 편지에도 같은 템플릿을 사용할 수 있다. 편지의 내용이나 수신인 주소는 달라져도 같은 디자인, 레이아웃을 사용할 때도 있으니 말이다.

Django 템플릿 양식은 HTML을 사용한다.

 

1. blog/templates/blog/post_list.html 생성

2. 

<html>
    <head>
        <title>Django</title>
    </head>
    <body>
        <h1>Hello Django Girls</h1>

        <p>Hi there!
        <p>It works!
    </body>
</html>

ORM

언어를 그대로 활용해서 SQL 쿼리를 생성하는 라이브러리를 ORM이라고 한다.

Django Model(Django 에서의 ORM)

쿼리셋

Django ORM 을 이용하여 데이터베이스로부터 데이터를 읽거 필터를 걸거나 정렬할 수 있습니다.

 

1. python manage.py shell # manage.py로 쉘을 열면 Django 환경을 기본셋업을 해주고 쉘을 띄워준다.

 

2. 모든 객체 조회하기

from blog.models import Post
Post # 확인

Post.objects.all() # 모든 객체 조회

for post in Post.objects.all():
	print(post)

객체 생성하기

데이터베이스에 새 글 객체를 저장하는 방법

#하지만 여기에 뭔가 빼 먹은 것이 있다. me 를 배 먹었다. 작성자로서 User 모델의 인스턴스를 가져와 전다랳줘야 한다.

from django.contrib.auth.models import User

User.objects.all() # 모든 유저목록 확인 2044smile

me = User.objects.first() # 2044smile 을 me에 저장
me = User.objects.get(username='2044smile') # get을 이용하여 username을 지정해서 저장도 가능하다.

Post.objects.create(author=me, title='Sample title', text='Test')

me.username # '2044smile'
me.password # 암호화 된 값들이 출력

Post.objects.create(author=me, title='Sample title', text='Text')
Post.objects.all() # 한 개가 더 추가된 걸 확인할 수 있다.

 

기본 python shell 보다 강력하고 더 유용한 ipython

(myvenv) C:\dangogirls > pip install ipython # 설치

python manage.py shell # 실행

 

필터링

쿼리셋의 중요한 기능은 데이터를 필터링하는 것이다.

Post.objects.filter(author=me) # author가 me 인 것을 찾아라

Post.objects.filter(title__contains='title') # title을 가지고 있느 목록을 출력
# contains는 대소문자를 구분한다. 'title' 과 'Title' 을 다른 것으로 인식한다는 것이다.
# 이 때는 icontains 앞에 i(이그노어)를 붙여 무시하게 할 수 있다.

#####################################

from django.utils import timezone

timezone.now() # 현재시각 확인

Post.objects.filter(published_date__lte=timezone.now()) # 현재시간보다 발행일시가 작거나 같은 것
# 여기서 결과가 안나오는 이유는 발행(publish) 하지 않았기 때문에 나오지 않는다.
# lte는 less than equal로 <= 를 의미한다.
# gte는 greater >= 를 의미한다.

게시

post = Post.objects.get(title='Sample title')

post.publish() # post를 발행

post.published_date # 발행한 날짜 확인

Post.objects.filter(published_date__lte=timezone.now()) # 발행날짜가 현재시간보다 적으면 출력

정렬하기

Post.objects.order_by('created_date') # 필드 대한 오름차순

Post.objects.order_by('-created_date') # 필드를 기준으로 내림차순(-)

# 쿼리셋 연결하기
Post.objects.filter(published_date__lte=timezone.now()).order_by('bulished_date')
# 조회할 조건들을 계속 추가하는 것이다. ex) where

 

User.objects.all() = SELECT * FROM User;

User.bojects.create(author=me, tittle=' ', text=' ') = CREATE TABLE me ( ~ )

Post.objects.order_by('created_date') # 필드 대한 오름차순 = order by created_date ASC;
Post.objects.order_by('-created_date') # 필드를 기준으로 내림차순(-) = order by created_date DESC;

 

댓글

💲 추천 글