2018-01-31 TIL WPS 18. Crawler, Django 복습

ORM : 데이터베이스 레이아웃을 파이썬 코드로 표현할 수 있게 하는 것

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