django 강의 1~2주차

김하진·2022년 5월 26일
0

드디어 주특기인 django 강의를 듣기 시작했다.
생각보다 너무 재밌어서 놀랐다.. 이렇게 재밌을 줄 이야

맨처음 웹개발종합반 강의 처음들었을 떄는 너무 어렵고 무슨말인지 몰랐는데 django 강의는 내용도 너무 잘 이해되고 실습하는 부분이 재밌어서 계속해서 진도를 빼고 있다.

아마 그전에 Flask를 어느정도 하고 와서 그런지 기능들이 너무편하고 조금은 신세계였던 같다.

MVT 패턴

  • M (Model)
    • 데이터베이스의 모델 (ORM)
    • 저장되고 사용되는 데이터의 형태
  • T (Template)
    • 사용자에게 보여지는 부분
    • 화면
  • V (View)
    • 실질적으로 프로그램이 동작하는 부분
    • url을 요청하고 응답하는 그 사이에 일어나는 '서비스'들이 존재하는 곳

ORM 이란?

  • Django의 ORM은 Python으로 데이터베이스 클래스 모델을 만들고, 만든 모델을 바탕으로 자동으로 데이터베이스를 다룰 수 있도록 도와줍니다.

  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.
    객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
    객체 모델과 관계형 모델 간에 불일치가 존재한다.

  • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
    데이터베이스 데이터 <—매핑—> Object 필드
    객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.

  • Persistant API라고도 할 수 있다.
    Ex) JPA, Hibernate 등

출처: https://gmlwjd9405.github.io/2019/02/01/orm.html

settings.py

INSTALLED_APPS - 장고에 설치 된 앱들
MIDDLEWARE - 사용자 요청/응답 사이에서 작동하는 시스템들
TEMPLATES - 나의 html파일을 자동으로 인식
DATABASES - 내가 사용할 데이터베이스 연동 설정
AUTH_PASSWORD_VALIDATORS - 패스워드 보안 수준 검증
LANGUAGE_CODE - 화면에 어떤 언어를 보여줄것인지
TIME_ZONE - 우리가 어떤 시간에 있는지

vs코드 장고 셋팅

나는 파이참이 아닌 vs코드로 장고를 세팅해야해서 여러가지 환경을 셋팅해 주어야한다

python -m venv djangovenv

가상환경 셋팅해주고

F1 을 눌러서 Select interpreter 에서
셋팅된 가상환경으로 인터프리터 변경

터미널을 실행시켜서

python -m pip install django

설치후 cd, mkdir을 이용해서 폴더 만들고

djnago- admin startproject 프로젝트명
으로 프로젝트를 실행하면 된다.

서버실행은

python manage.py runserver

장고가 일하는 순서

출처:https://www.notion.so/Django-2-a7851e5fbefa4f8fa7847eb8af8c7658

프로젝트 구조만들기 (app)

django-admin startapp user
을 이용하면 app을 만들 수 있다.

database 연결

vs코드에서는 sqlite 를 설치하고 Ctrl + shift + p 를 눌러 열고하는 datebase를 연결해주면 끝!

datebase 명령어

데이터베이스 변경을 알려주는 명령어

python manage.py makemigrations

변경된 데이터베이스를 반영 해 주는 명령어
python manage.py migrate

둘다 입력해야 한다.

admin

장고에서는 기본적으로 관리자 툴을 제공해준다. 너무 편한 기능이다. 관리자 계정은

python manage.py createsuperuser
를 터미널에 입력하면 만들 수 있다

url 연결

# mySpartaSns/urls.py
from django.contrib import admin
from django.urls import path, include

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

메인 urls.py 에다가
user 앱의 urls.py 에 연결 시키겠다는 코드이다.

로그인 기능


def sign_in_view(request):
    if request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)

        me = auth.authenticate(request, username=username, password=password)
        if me is not None:
            auth.login(request, me)
            return HttpResponse(me.username)
        else:
            return redirect('/sign-in')    
    elif request.method == 'GET':
        return render(request, 'user/signin.html')

회원가입 기능

def sign_up_view(request):
    if request.method == 'GET':
        return render(request, 'user/signup.html')

    elif request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)
        password2 = request.POST.get('password2', None)
        bio = request.POST.get('bio', None)

        if password != password2:
            return render(request, 'user/signup.html')

        else:
            exist_user = get_user_model().objects.filter(username=username)   
            if exist_user:
                return render(request, 'user/signup.html')  
            else:
                UserModel.objects.create_user(username=username, password=password, bio=bio)
                return redirect('/sign-in')

그리고 3주차 중간 부분 까지 강의를 듣고 있다. 장고가 일단 너무 편한점은, DB가 구현되어 고, 이미 만들어진 회원가입, 로그인 같은 기능들을 너무 편하게 가져다 쓸 수 있다. 또한 세션까지 해주고 비밀번호도 자동으로 해싱해준다.

그동안 Flask 에서 직접 구현해야 될 부분의 많은 부분을 지원해줘서 개발할때 확실히 편한 느낌이 많이든다. 좀더 재밌게 공부 할 수 있을 것 같다.

profile
진킴

0개의 댓글