**Django
- 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크
- 설치
- $pip install django
- Urlresolver
- ->일치하는 패턴의 경우 요청을 연관된 함수(view)에 넘긴다.
- 웹 서버에 요청이 오면 장고로 전달되고, 장고가 웹 페이지의 주소를 가져와 무엇을 할지 확인
- 각 URL에 대해 일일이 확인하기는 비효율적이므로, 패턴으로 일치여부를 판단
- MVC vs MTV


-MVC
Model View Controller
-
애플리케이션을 세가지의 역할로 구분한 개발 방법론
-
사용자가 웹사이트에 접속한다. (Uses)
-
Controller는 사용자가 요청한 웹페이지를 서비스하기 위해 모델을 호출한다. (Manipulates)
-
모델은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 리턴한다.
-
Controller는 Model이 리턴한 결과를 View에 반영한다. (Updates)
-
데이터가 반영된 View는 사용자에게 보여진다. (Sees)
-MTV
- Model Template VIew
- Model : 안전하게 데이터를 저장
- View : 데이터를 유저에게 보여줌(MVC와는 다름), URL을 Parsing
- Template: 사용자 입력과 같은 이벤트 처리를 하고, Model, View 업데이트

-Django cycle

-MTV 코딩 순서
- 프로젝트 생성
- 프로젝트 및 앱 개발에 필요한 디렉토리와 파일 생성
- 모델 생성
- 테이블 관련 내용 개발 (models.py, admin.py)
- URI conf생성
- URL 및 뷰 매핑 관계를 정의 (urls.py)
- View 생성
- 애플리케이션 로직 개발 (views.py)
- Template 생성
- 화면 UI 개발 (templates/ 디렉토리 하위의 *.html 파일)
# setting.py
-
데이터베이스 설정
-
Default로 Sqlite3 사용
-
템플릿 항목 설정
-
TEMPALTES 항목 지정
-
정적 파일 항목 설정
-
STATIC_URL 등 관련 항목 지정
-
애플리케이션 등록
-
프로젝트에 포함되는 모든 애플리케이션 등록
-
타임존 지정
-
UTC 변경 (한국)
# models.py
-
테이블을 정의하는 파일
-
ORM(Object Relation Mapping) 사용
-
테이블을 클래스로 매핑하여 CRUD 기능을 클래스 객체에 대해 수행 -> DB 반영
-
테이블을 클래스, 테이블의 컬럼은 클래스 변수로 매핑
-
django.db.models.Model 클래스 상속
-
models.py에서 DB 변경 사항 발생시, 실제 DB에서도 반영
-
ex)makemigrations, migrate 사용
-
-
django 1.7부터 마이그레이션 기능 사용
# URLconf 주요사항
-
URL과 VIew(함수 또는 메소드)를 매핑하는 urls.py 파일
-
프로젝트 URL과 앱 URL로 구성하는 것 추천
-
{% url %} 템플릿 태그 사용
#views.py
-
뷰 로직을 생성하는 파일
-
함수(Function-based view) 또는 클래스(Class-based view)로 생성 가능
#templates
-
웹 화면(페이지) 별로 템플릿 파일(*.html)이 필요
-
TEMPLATES 설정의 DIR 항목에 지정된 디렉토리에 앱 템플릿 파일 저장
-
ex) templates/ 디렉토리
#Admin
-
테이블 내용을 열람하고 수정하는 기능을 제공하는 사이트
-
User 및 Group 테이블 관리
-
setting.py에 django.contrib.auth 애플리케이션이 등록
-
사용자가 비즈니스 로직 개발에 필요한 테이블 관리(CRUD)
#개발용 웹 서버
-
테스트용 runserver 제공
-
상용화를 위해서는 Apache or Nginx 등의 상용 서버로 변경
$conda create --name myweb
$conda activate myweb
$conda list
$conda install django
--애플리케이션 설계
**로직 설계

**URL 설계

**작업/코딩 순서

$django-admin
$django-admin startproject mybookmark
$cd mybookmark
$python manage.py migrate
#setting.py
import os
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_L10N = True
USE_TZ = True
$python manage.py createsuperuser
admin/admin
$python manage.py startapp bookmarkapp
#setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bookmarkapp.apps.BookmarkappConfig',
]
#bookmarkapp/models.py
from django.db import models
# Create your models here.
class Bookmark(models.Model):
title = models.CharField(max_length=100, blank=True, null=True)
url = models.URLField('url', unique=True)
def __str__(self):
return self.title + "(" + self.url + ")"
#bookmarkapp/admin.py
from django.contrib import admin
from .models import Bookmark
# Register your models here.
class BookmarkAdmin(admin.ModelAdmin):
list_display = ('title', 'url')
admin.site.register(Bookmark, BookmarkAdmin)
$python manage.py makemigrations(변경된 파일 update)
$python manage.py migrate(변경된 파일 실제 db에 반영)
$python manage.py showmigrations
$python manage.py runserver 0.0.0.0:8000(모든 ip address 허용 : 어느곳에서도 8000번 접속할 수 있도록 설정)
$python manage.py dbshell
sqlite>.tables
sqlite>select * from bookmarkapp_bookmark;
sqlite>select * from bookmarkapp_bookmark where id=1;
sqlite>PRAGMA table_info(bookmarkapp_bookmark)
#urls.py
from django.contrib import admin
from django.urls import path
from bookmarkapp.views import BookmarkLV, BookmarkDV
urlpatterns = [
# http://127.0,0,1:8000/admin
path('admin/', admin.site.urls),
# http://127.0,0,1:8000/bookmark
path('bookmark/', BookmarkLV.as_view(), name='index'),
# http://127.0,0,1:8000/3
path('bookmark/<int:pk>', BookmarkDV.as_view(), name='detail'),
]
--listView, detailView 참고
https://docs.djangoproject.com/en/3.1/ref/class-based-views/generic-display
Generic display views | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
#mybookmark/views.py
from django.shortcuts import render
from django.views.generic import ListView, DetailView
from bookmarkapp.models import Bookmark
class BookmarkLV(ListView):
# url + "_list.html"
model = Bookmark
class BookmarkDV(DetailView):
# url + "_detail.html"
model = Bookmark
#bookmarkapp/templates/bookmarkapp/bookmark_list.html
<!DOCTYPE html>
<html>
<head>
<title>Django Bookmark List</title>
</head>
<body>
<div id="content">
<h1>Bookmark List</h1>
<ul>
{% for bookmark in object_list %}
<li><a href="{% url 'detail' bookmark.id %}" target='_blank'>{{ bookmark }}</a></li>
{% endfor %}
</ul>
</div>
</body>
</html>
target='_blank' -> 새창에서 열기
"{% url 'detail' bookmark.id %}" => "bookmark/{}".format(bookmark.id)
#bookmarkapp/templates/bookmarkapp/bookmark_detail.html
<!DOCTYPE html>
<html>
<head>
<title>Django Bookmark List</title>
</head>
<body>
<div id="content">
<h1>{{ object.title }}</h1>
<ul>
<li>URL: <a href="{{ object.url }}">{{ object.url }}</a></li>
</ul>
</div>
</body>
</html>
**장고는 내부에 ORM이 있어서 쿼리문을 쓰지 않아도 자동으로 매핑해줌
ListView.py
-> object_list = cursor.execute(select * from bookmark)
DetailView.py
-> object = select * from bookmark where id=?;
-> object o, None
'CLOUD > Django' 카테고리의 다른 글
1/22 Django - 복습(Templates, Static , Search with VS Code) (0) | 2021.01.22 |
---|---|
1/21 Django - 복습 2차시(with VS Code) (0) | 2021.01.21 |
1/15 Django 4차시 - blog app 만들기(Maria DB, 페이징처리, django REST frame) (0) | 2021.01.15 |
1/14 Django 3차시 - blog app만들기(CRUD + 로그인/로그아웃 + reply) (0) | 2021.01.14 |
1/13 Django 2차시 - blog app만들기(list, detail), css, bootstrap (0) | 2021.01.13 |