第二章:長期的な基本要素(1)


01 URLとビュー


🎈 アプリケーションの作成


ㄴ安卓アプリケーションの意義≠長久アプリケーションの意義
-ハンドヘルドアプリケーション:
> terminal
(mysite) C:\projects\mysite> django-admin startapp pybo

🎈 urlマッピング


ㄴ接続アドレス(url)と画面(ビュー)

> config/urls.py
from django.contrib import admin
from django.urls import path
from pybo import views

# 호스트명, 포트 생략하고 끝에 / 삽입하는 형식 <url 정규화>
urlpatterns = [
    path('admin/', admin.site.urls),
    path('pybo/', views.index),
]
> pybo/views.py
# request: 장고에 의해 자동으로 전달되는 HTTP 요청 객체
# request: 사용자가 전달한 데이터를 확인할 때 사용
# HttpResponse: 페이지 요청에 대한 응답을 할 때 사용하는 장고 클래스

from django.http import HttpResponse

def index(request):
    return HttpResponse("안녕하세요 pybo에 오신것을 환영합니다.")

02モデル


🎈 モデルの作成


ㄴSQLite:スモールプロジェクト用のファイルベースの軽量レベルデータベース
> pybo/models.py
class Question(models.Model):
    subject = models.CharField(max_length=200)
    content = models.TextField()
    create_date = models.DateTimeField()
		
	# 데이터 조회 시, 출력
    def __str__(self):
        return self.subject

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    content = models.TextField()
    create_date = models.DateTimeField()
> terminal
# 앱들이 필요로하는 테이블 생성
(mysite) C:\projects\mysite> py manage.py migrate
# 테이블 작업 파일 생성
(mysite) C:\projects\mysite> py manage.py makemigrations

# makemigrations, migrate 명령은 모델의 속성이 추가되거나 변경된 경우 실행
# 단순 메서드 추가/수정 시 불필요
> config/settings.py::INSTALLED APPSの「pybo」です.apps.PyboConfigの追加Pyboアプリケーションのインストール
# 장고 프로젝트에 설치된 앱들
INSTALLED_APPS = ['pybo.apps.PyboConfig',
					... ]

# 사용하는 DB에 관한 정보
# BASE_DIR = C:/python_projects/mysite
# 여러 DB 활용 시, 추가 가능
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

🎈 オブジェクトの作成、保存、クエリーおよび削除

> terminal
(mysite) C:\projects\mysite>python manage.py shell

>>> from pybo.models import Question, Answer
>>> from django.utils import timezone

###### 객체 생성 및 저장
>>> q = Question(subject='pybo가 무엇인가요?', content='pybo에 대해서 알고 싶습니다.', create_date=timezone.now())
>>> q.save()

>>> q = Question(subject='장고 모델 질문입니다.', content='id는 자동으로 생성되나요?', create_date=timezone.now())
>>> q.save()


###### 객체 조회
### 객체 개수 조회
# id: 데이터 유일값(pk), 데이터 생성 시 1씩 증가
>>> q.id
2

### 데이터 전체 조회
# __str__(self)을 통해 id 값 대신 제목 출력
>>> Question.objects.all()
<QuerySet [<Question: pybo가 무엇인가요?>, <Question: 장고 모델 질문입니다.>]>


### 특정 데이터 조회
# filter :: queryset 형식으로 반환 
# 조건에 맞지 않는 데이터 시도 시, 빈 쿼리셋 반환
>>> Question.objects.filter(id=1)
<QuerySet [<Question: pybo가 무엇인가요?>]>

# filter(subject_contains='..') : 특정 문자열이 포함되어 있는 데이터 조회 
>>> Question.objects.filter(subject__contains='장고')
<QuerySet [<Question: 장고 모델 질문입니다.>]>

# get : 모델 객체 반환
# 조건에 맞지 않는 데이터 시도 시, 오류 메시지 발생
>>> Question.objects.get(id=1)
<Question: pybo가 무엇인가요?>


###### 특정 객체 수정
>>> q = Question.objects.get(id=2)
>>> q.subject = 'Django Model Question'
>>> q.save()


###### 특정 객체 삭제
# delete : (삭제된 모델 데이터 id, {모델명, 삭제된 모델 개수}) 반환
>>> q = Question.objects.get(id=1)
>>> q.delete()
(1, {'pybo.Question': 1})


##### 연결된 데이터
### 연결 객체 생성
>>> q = Question.objects.get(id=2)
>>> a = Answer(question=q, content='네 자동으로 생성됩니다.', create_date=timezone.now())
>>> a.save()

### 연결된 객체 조회
# A로 Q 찾기
>>> a.question
<Question: Django Model Question>
# Q로 A 찾기
>>> q.answer_set.all()
<QuerySet [<Answer: Answer object (1)>]>

03倉庫管理者


🎈 管理者の作成(admin)


ㄴユーザー名:admin
ㄴ電子メールアドレス:[email protected]
1234
> terminal
(mysite) c:\projects\mysite>python manage.py createsuperuser
사용자 이름 (leave blank to use 'pahke'): admin
이메일 주소: admin@mysite.com
Password:
Password (again):
비밀번호가 너무 짧습니다. 최소 8 문자를 포함해야 합니다.
비밀번호가 너무 일상적인 단어입니다.
비밀번호가 전부 숫자로 되어 있습니다.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

»誤った経験


▶OperationalError:no that table:~~移行の確認
▶Circular Dependencies♥対応するアプリケーション移行フォルダ内~001.pyを削除してから再移行
▶Exception[WinError 995]スレッド終了またはアプリケーション要求によるI/O操作のキャンセル
⇒ downgrade prompt toolkit to 2.x
  >> pip uninstall prompt-toolkit
  >> pip install prompt-toolkit==2.0.10)