Django 실전(2): 첫 번째 모델 클래스 만들기

8026 단어 django
모형부터 개발하는 것이 좋은 생각인 것 같다.한편, 모델은 전체 응용의 핵심으로 응용된 업무 데이터와 업무 데이터에 대한 조작의 제약을 실현했다. 반면에 보기와 템플릿은 사용자에게 이러한 데이터를 조작하고 보여주는 인터페이스만 제공한다.다른 한편, 모델은 시스템의 다른 부분에 비해 더욱 안정적이고 모델을 먼저 확정하면 시스템의 다른 부분의 실현에 도움이 된다.DDD(영역 구동 디자인)는 모델 중의 핵심 대상을 한층 더 추출하여'영역 모델'로 삼는다.
디팟 애플리케이션을 보면 제품(Product)은 모델의 핵심 대상 중 하나일 것이다.우리 먼저 프로듀스 모델을 실현합시다.
app 만들기
우리는 에서구문을 사용합니다.계속하기 전에 준비 작업을 좀 더 해야 한다.Django 규약은 모델을 사용하려면 app를 만들어야 합니다.이것도 Django의 철학 중 하나이다. Django는 하나의 프로젝트가 여러 개의 Django appl을 포함한다고 생각한다.프로젝트는 데이터베이스 연결 정보, 설치된 app 목록, 템플릿 경로 등 설정 파일을 제공합니다.한편, 하나의 앱은 Django 기능의 집합으로 보통 모델과 보기를 포함하고 Python의 패키지 구조에 따라 존재한다.app는 여러 프로젝트 사이에서 쉽게 복용할 수 있습니다.예를 들어 Django가 자체로 가지고 있는 주석 시스템과 자동 관리 인터페이스.그래서 우리는 기존 프로젝트의 기초 위에서 앱을 만들어야 한다.현재 우리는 단지 하나의 앱만 있으면 depotapp라고 명명할 수 있다고 가정합니다.응용 프로그램을 만드는 스크립트도 프로젝트 디렉터리에 있는 managy를 사용합니다.py:
$python manage.py startapp depotapp
프로젝트 디렉터리에 depotapp 디렉터리를 생성합니다: depotapp/init__.py     models.py     tests.py     views.py
python 코드로 데이터베이스 정의하기
에서에서 설명한 바와 같이 Django의 디자인은 Python 클래스의 형식으로 데이터 모델을 정의한다.rails가 실행될 때 데이터베이스 schema를 자동으로 가져오는 마술을 사용하지 않은 이유", 다음과 같은 고려에서 나온 것이다. 1. 효율성. 실행할 때 데이터베이스를 스캔하면 성능 문제를 가져올 수 있다. 2. 명확성. 모델 클래스를 통해서만 데이터베이스에 어떤 필드가 있는지 완전히 알 수 있다. 더 이상migration이나 schema 파일로 전환할 필요가 없고 데이터베이스 구조를 볼 필요도 없다. 3. 일치성. 네가 본 것은 파이톤 코드일 뿐 뇌를 전환할 필요가 없다."4. 버전 제어. rails의 데이터베이스 구조 버전은 하나의migration 파일에 저장됩니다. 이것은 바로 버전 관리의'반모드'입니다. Django의 방식은 모델 코드 파일의 버전을 관리하는 것입니다. 5. 확장성. 데이터베이스에 존재하지 않는'필드 유형'을 정의할 수 있습니다."예컨대 Email, URL 등등. 물론 Django도 기존 데이터베이스 테이블에서 모델을 자동으로 스캔하여 생성하는 도구를 제공합니다. so, Agile Web Development with Rails의 방법은 데이터베이스 테이블을 먼저 만드는 것입니다.
drop table if exists products;
create table products (
id int not null auto_increment,
title varchar(100) not null,
description text not null,
image_url varchar(200) not null,
price decimal(10,2) not null,
primary key (id)
);

그리고 scaffold (모델, controller,test, 4개views 등 포함) 를 생성합니다.Django는 다음 모델 클래스를 작성합니다.
depot/depotapp/models.py:
from django.db import models

class Product(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
image_url = models.CharField(max_length=200)
price = models.DecimalField(max_digits=8,decimal_places=2)

다른 ORM과 마찬가지로 ID 필드는 기본적으로 선언되며 별도로 처리할 필요가 없습니다.
 
 
배치 모델인 Django의 모든 일은 명확한 성명을 필요로 한다. 즉, 당신의 허락 없이는 Django가 자발적으로 당신의 코드를 건드리지 않는다는 것이다.그래서 우리는 프로젝트에서 일부 설정 작업을 해야만 앱이 효력을 발생시킬 수 있다.하지만 이런 설정은 한 번만 하면 된다.먼저 데이터베이스를 만들고 전체 프로젝트의 데이터베이스 연결을 설정해야 한다. 간단하게 보기 위해 sqlite 데이터베이스를 사용한다.프로젝트 폴더 아래db 폴더와 sqlite 데이터베이스 파일을 만듭니다: $mkdir db $cd db $sqlite3 개발자.qlite3 다음에 설정 파일 settings를 수정합니다.py, DATABASES를 다음으로 변경:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'db/development.sqlite3',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}

데이터베이스 설정이 완료되었습니다.depotapp를 실행할지 settings에서 실행할지 프로젝트를 설정해야 합니다.py에서 INSTALLEDAPPS 변경:
INSTALLED_APPS = (
#'django.contrib.auth',
#'django.contrib.contenttypes',
#'django.contrib.sessions',
#'django.contrib.sites',
#'django.contrib.messages',
#'django.contrib.staticfiles',

# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'depot.depotapp',
)

이제 모델을 사용할 수 있습니다.먼저 확인하십시오: $python 관리자.py validate 0 errors found 다음에 이 모델이 어떤 데이터베이스를 생성할지 볼 수 있습니다: $python 관리자.py sqlall depotapp BEGIN; CREATE TABLE "depotapp_product"(     "id"integer NOT NULL PRIMARY KEY,     "title"varchar(100) NOT NULL,     "description"text NOT NULL,     "image_url"varchar(200) NOT NULL,     "price"decimal NOT NULL ) ; COMMIT; 마지막으로 모델을 데이터베이스에 가져옵니다: $python 관리자.py syncdb Creating tables ... Creating table depotapp_product Installing custom SQL ... Installing indexes ... No fixtures found. 이로써 첫 번째 모델 클래스 생성이 완료되었습니다.

좋은 웹페이지 즐겨찾기