11-27(수) TIL

O(logn)·2024년 11월 28일

파이썬 웹크롤링

목록 보기
12/12

장고 서버 켜고 앱 생성

서버 켜기

python manage.py runserver

앱 생성

python manage.py startapp polls:manage.pypolls라는 앱을 생성함

경로 만들고 콘텐츠 생성

  • polls/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world.")
  • mysite/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path("admin/", admin.site.urls),
    path("polls/", include('polls.urls'))
]
  • polls/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('',views.index, name='index')
]

문제

django 패키지를 깔았는데 visual studio code에서는 안 깔았다고 뜸

시도

인터프리터 변경(recommended, 가상환경의 파이썬 버전과 맞게)->실패
기존에 열려있던 파일을 모두 닫고, open new file을 통해 새로운 창을 띄워줌.->해결

해결

잘 깔아짐..

알게된 점

VS Code의 인터프리터가 이 가상환경으로 설정되지 않았다면 터미널에서 설치된 django가 해당 환경에서 인식되지 않는다.

왜 잘 깔아졌을까?

터미널에서 설치했을 때 성공한 이유는 터미널이 올바른 가상환경을 사용했기 때문이다.

VS Code는 터미널과 인터프리터가 별도로 동작하므로 터미널에서 실행한 pip install은 가상환경에 직접 django를 설치할 수 있었다.
설치 후 가상환경에 django가 추가되었으므로 VS Code에서도 이를 인식하게 되었을 가능성이 크다.


용어

  • 테이블(=모델): 행과 열로 이루어진 데이터
  • 필드(=열)
  • 레코드(=행)
  • 외래키(foreign key): 외교관. 대한민국 국민(테이블)이지만 외교(관계)를 위해 다른나라(테이블)에 거주함.
  • 주키(primary key): 테이블에서 각 행을 고유하게 식별할 수 있는 열
  • ORM: 장고의 모델링
  • Migration: 데이터베이스 스키마(구조)를 관리하고 변경 사항을 추적하는 방식. 모델의 변경 사항( 새로운 필드 추가, 필드 수정)을 데이터베이스에 적용하는데 사용됨

마이그레이션의 역할
1. 모델 -> 데이터베이스 변환
2. 변경 사항 추적
3. 동기화


마이그레이션

  • 모델의 변경 사항을 데이터베이스에 적용하는 데 사용합니다.

1단계: 모델 정의 또는 변경

  • django 앱의 models.py에서 모델(데이터베이스 테이블)을 정의하거나 변경합니다.
from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length = 200)
    pub_date = models.DateTimeField('date published')
    
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default = 0)

2단계: 마이그레이션 생성

  • 모델 변경 사항을 반영하기 위한 마이그레이션 파일을 생성합니다.
python manage.py makemigrations polls

이 명령은 polls앱의 데이터베이스 변경 사항을 기술한 마이그레이션 파일을 migrations/ 디렉터리에 생성합니다.

python manage.py sqlmigrate polls 0001

이 명령은 migration으로 실행될 SQL 문장을 미리 보는 명령어입니다.

3단계: 마이그레이션 적용

  • 생성된 마이그레이션 파일을 데이터베이스에 적용합니다.
python manage.py migrate

이 명령은 데이터베이스를 업데이트하여 변경 사항을 반영합니다.

4단계: 마이그레이션 파일

마이그레이션 파일은 각 앱의 migrations 디렉터리에 생성되며, 데이터베이스 변경 사항을 설명하는 Python 코드가 포함됩니다.


장고의 다양한 모델 필드

https://docs.djangoproject.com/en/5.1/

모델에 필드 추가/삭제하기

0단계: 앱에 모델 추가하기

  • polls/admin.py에 모델을 등록합니다.
from django.contrib import admin
from .models import *

#Register your models here
admin.site.register(Question)
admin.site.register(Choice)

1단계: 모델에 필드 추가하기

필드 종류

  • BooleanField
  • CharField
  • DateTimeField
  • FloatField
  • JSONField
  • polls/models.pyQuestion모델의 필드를 수정합니다.
class Question(models.Model):
    question_text = models.CharField(max_length = 200)
    pub_date = models.DateTimeField('date published')
    score = models.FloatField(default = 0)
    is_something_wrong = models.BooleanField(default = False)
    json_field = models.JSONField(default = dict)
        
    def __str__(self): # question행의 제목 지정
        return f'제목: {self.question_text}, 날짜: {self.pub_date}'

2단계:마이그레이션

  • 마이그레이션 파일을 생성합니다.
$ python manage.py makemigrations
  • 마이그레이션 파일을 데이터베이스에 적용합니다.
$ python manage.py migrate

3단계: 모델에서 필드 삭제하기

  • 마이그레이션을 이전 버전으로 되돌립니다.
$ python manage.py migrate polls 0001
  • models.py에서 0001버전에 없는 필드를 제거합니다.
class Question(models.Model):
    question_text = models.CharField(max_length = 200)
    pub_date = models.DateTimeField('date published')

4단계: 저장 후 새로고침

  • 변경한 파일을 저장해주고, 웹서버를 새로고침합니다.
profile
聞一知十

0개의 댓글