ORM : 데이터베이스 레이아웃을 파이썬 코드로 표현할 수 있게 하는 것
self.genre에서 ‘’ 를 표시한 이유는 내부에서만 수정할 수 있게 작동하기 위해서.. 외부에서 직접 속성값으로 입력되어선 안되고 내부에서 할당하도록 해야하는 속성에 사용한다.
decorator
나중에 프로젝트할 때 API서버를 만듦, CSS신경안쓰고 백엔드만 다룸
Django Blog 만들기 다시 연습
프로젝트 시작할 때 기본 설정!
pip freeze > requirements.txt
pip install -r requirements.txt
또는
pyenv local blog
Project Interpreter에서 가상환경 설정 등록 경로: /usr/local/var/pyenv/version/blog/bin/python
첫번째 폴더 source root 설정 상대경로를 참조하는 기준
mysite(blog) -> config refactor
config.urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include(('blog.urls', 'blog'), namespace='blog_index')) # 첫 번쨰 인자로 문자열을 받고, 두번째 인자로 view를 받음. 세 번쨰 인자는 view의 이름(?)
]
blog.urls.py
urlpatterns = [
path('post/', post_list)
]
models.py
class Post(models.Model): # models.Model의 상속을 받아야만 모델이 될 수 있다!
# id = models.AutoField() # id는 일부러 만들지 않아도 저절로 생성되지만 custom으로 만들 수도 있다. 아래 예
# ex) special_id = models.CharField(primary_key = 'True', unique='True')
title = models.CharField(max_length=255) # title 객체 생성. 모델에서는 객체 한개가 DB에서 한 column(field)이 됨.
created_date = models.DateTimeField(auto_now_add=True)
content = models.TextField() # 짧은 내용의 글은 CharField, 긴 글의 내용은 TextField로 메소드를 선택
# 3개의 Field를 생성하는 모델
# 모델을 만들고 데이터베이스로서 사용되려면 migrations로 만들어야함 -> $ python manage.py makemigrations
# makemigrations -> 모델에 의한 테이블 생성 및 수정
# migrate -> 데이터베이스 안의 내용을 적용
# python manage.py sqlmigrate blog 0001 으로 migrations 파일을 보면 다음과 같이 나옴
# CREATE TABLE "blog_post" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(255) NOT NULL,
# "created_date" datetime NOT NULL, "content" text NOT NULL);
# admin.py에 Post 클래스 등록
# from blog.models import Post
# admin.site.register(Post)
# manage.py createsupersuer 로 슈퍼유저를 생성하면 admin에서 확인할 수 있다.
views.py
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
from blog.models import Post
def post_list(request): # views 는 class형태 또는 함수 형태로 쓸 수 있다.
posts = Post.objects.all() # 쿼리셋
# context는 무조건 딕셔너리 타입
context = {
'posts' : posts
}
return render(request, 'post_list.html', context) # render는 항상 첫 번째 인자를 request로 받고 두 번째로 html파일이름을 string으로 받음
post_list.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Post List</title>
</head>
<body>
</body>
</html>
Comments