python & django training (1)

남순식·2023년 12월 19일

python-django

목록 보기
1/1

Django

  • 홈페이지
    The web framework for perfectionists with deadlines. (마감에 쫓기는 완벽주의자를 위한 웹 프레임워크)
    간편하고 빠르지만 완성도마저 갖추었다고 한다.

진행하면서 느낀 점을 먼저 적는다면 정말 웹 서비스를 빨리 만들 수 있다.

  • admin, login, validation... 등 이미 많은 기능이 구현되어 있다.

01. 본격적으로 python

1-1. 가상환경

[문제]

  • 각기 다른 두 django application을 개발한다고 가정 할 때 django나 사용하는 모듈의 버전이 다르면 서로 다른 버전 두개를 다운받아야하는 문제
    • 개발환경을 구축하기도 어렵고, 사용하기도 어렵다. (project1은 x버전.. 2는 y버전..)

[가상 환경을 이용한 해결]

  • 각기 다른 두 django application을 위한 가상환경을 구성해 독립적으로 django, module을 다운받아 사용할 수 있다.
    • 다수의 프로젝트를 개발 할 때 각각에 맞는 가상환경을 만들어 사용하면 된다.

1-1-1. 사용 방법

  • python을 다운받은 것을 전제로 한다.
% cd ~  
~ % mkdir venvs
~ % cd venvs
~/venvs % python3 -m venv 가상환경이름
  • cd ~
    • mac 기준 홈 디렉터리로 이동
  • mkdir venvs
    • venvs 디렉터리 생성 (가상환경들을 담을 디렉터리)
  • cd venvs
    • venvs 디렉터리로 이동
  • python3 -m venv {}
    • python의 venv라는 모듈을 사용하겠다는 명령어, {}안에는 내가 사용할 가상환경의 이름을 정의하면 된다.
~/venvs % cd 가상환경이름/bin
~/venvs/가상환경이름/bin % source activate
(가상환경이름) ~/venvs/bin %

성공

  • 가상환경을 종료하기 위해서는 deactivate 명령을 실행하면 된다.

  • 이제 (가상환경이름)이 붙어있으면 pip(핍)을 사용해 django나 모듈들을 다운받아 사용할 수 있고 이는 해당 가상환경에서만 사용할 수 있다.

  • 가상환경에서 django를 다운 받았을 때 다른 가상환경에서는 사용할 수 없다는 뜻

02. 본격적으로 Django

  • 사용할 에디터에서 사용할 가상환경을 적용하고 난 이후
django-damin startapp {app name}

을 실행하면 해당 app name으로 app을 추가할 수 있고

- my-project
  - config
    - ...
    - ...
  - app-name
    - migrations
      - ...
      - ...
    - ...
    - ...

모양의 구조를 가진다.

2-1. include

  • config디렉터리에 있는 python파일에 나의 app에서 사용할 프로퍼티 등을 추가해 사용할 수 있다.
  • myapp에서 요청받을 url등을 myapp/urls.py에 정의하고나서 config/urls.py에 추가할 수 있다.
# my-project/myapp/urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index),
]
# my-project/config/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myapp/', include('myapp.urls')), 
]

위 처럼 사용하면 내가 개발하는 myapp의 url을 django project에 매핑해 사용할 수 있다.

2-2. model

  • db와 연결되는 Model(entity) class 는
    django.db.models에 있는 models.Model을 상속받아 사용할 수 있다.
models.CharField(max_length=200)
models.TextField()
models.DateTimeField()
models.xxxField()
...

models는 프로퍼티를 xxxfield로 지정하고 저장/읽기/수정 한다.
더많은 field()를 지원하며 여기 에서 확인할 수 있다.

2-2-1. django orm

  • 기본적으로 내장되어 있다.
  • 사용할 모델(entity)을 정의하고
    config/setting.py에서 아래와 같이 추가하면
INSTALLED_APPS = [
    'pybo.apps.MyappConfig',  # 추가
    'django.contrib.admin',
    'django.contrib.auth',
    (... 생략 ...)
]
python manage.py makemigrations

명령을 실행하면 해당 model(entity) table을 생성, 수정하는 쿼리가 작성된 python file이 생성되고

python manage.py migrate

명령을 사용해 해당 파일을 읽어 자동읋 테이블을 수정 또는 삭제 한다.

  • .save() = 모델을 db에 업데이트한다. (수정 / 저장)
  • MyClass.objects.all() = 해당 모델 전체를 읽어 QuerySet으로 반환한다.
  • MyClass.objects.filter(id=1) = 해당 모델 전체중 조건(id=1)에 해당하는 객체전체를 QuerySet으로 반환한다.
  • MyClass.objects.get(id=1) = 해당 모델 전체중 조건(id=1)에 해당하는 객체를 반환한다.
    • my = MyClass.objects.get(id=1)
    • my.delete() 를 실행하면 my객체는 db에서 삭제된다.

2-3. django-admin

  • 장고는 관리자 기능이 구현돼 있다.
    • createsuperuser 를 실행해 admin super account를 생성할 수 있고
      loacalhost:8000/admin에 로그인하면 관리자화면에 접속할 수 있다.
    • 모델관리를 할 수 있다. (모델 crud)
  • myapp/admin.py에서 django/contrib/admin을 불러와 admin.ModelAdmin
    Class를 상속받는 Admin Class를 만들어 model객체를 조작할 수 있다.
class MyClassAdmin(admin.ModelAdmin):
	search_fields['my_class_property']

admin.site.register(MyClass, MyClassAdmin)

다음편에 이어서 작성

profile
응집력있는 시간을 보내기 위한 블로그

0개의 댓글