Django 셋팅 내맘대로 정리

Jimin·2023년 1월 30일
0

루트 디렉토리 생성

mkdir [디렉토리 명]
ls // 디렉토리 확인
cd [디렉토리 명]	// 디렉토리로 이동

가상환경 진입

python -m venv [가상환경 명]
cd [가상환경 명]
ls

이때, bin, pyvenv.cfg와 같은 파일이 생성되었다면 성공

가상환경 활성화

cd bin
source ./activate

(가상환경명) 이렇게 앞에 뜨면 성공

bin 폴더에 진입하지 않고 바로 source ./bin/activate를 실행해도 됨
비활성화: deactivate

장고 설치(in 가상환경)

pip install django
python -m pip install --upgrade pip
python -m django --version

버전 확인했을 때 버전이 뜨면 성공

장고 프로젝트 생성(In 가상환경)

cd [루트 디렉토리]
mkdir [프로젝트 명]
cd [프로젝트 명]
django-admin startproject config .
ls

루트 디렉토리란 가장 위에서 설정했던 디렉토리 명

django-admin startproject config . : 현재 디렉토리를 장고 프로젝트로 설정하고 필요한 설정 파일을 config 폴더에 설치
.는 현재 디렉토리를 장고 프로젝트로 설정하는 옵션
폴더명은 config가 꼭 아니어도 됨

ls 후 config, manage.py 파일이 생성되었다면 성공

cd config
ls

settings.py 등 장고 관련 파일이 생성되었다면 성공

서버 구동

cd ..

[프로젝트 폴더]로 이동

python manage.py runserver

서버 중단

control + c

Migration

개발자가 모델에 대한 변경점(예: 필드 추가, 모델 삭제 등)을 데이터베이스 스키마에 적용(propagate)하는 Django가 사용하는 방법

Django DB의 state을 바꾸기 위해 사용한다.

Django는 많은 기능을 자동으로 설정해주는데,
그 기능을 활용하기 위해선 DB의 state을 변경하는 작업이 필요하다.
⇒ 그 작업이 바로 Migration!

python manage.py makemigrations
python manage.py migrate

아이디 비번 만들기

python manage.py createsuperuser

프로젝트에 App 만들기

python manage.py startapp 앱이름

settings.py Installed Apps에 앱 이름 추가해주기

'앱 이름' 
혹은
'앱이름.apps.(apps.py에 있는 class 이름 (앱이름Config))'

admin panel 만들어주기

  1. admin.py
from .models import House

@admin.register(House)
class HouseAdmin(admin.ModelAdmin):
	pass

url 파일 만들어주기

  1. 먼저 생성한 app 아래에 urls.py 파일 만들어주기
from django.urls import path
from . import views
urlpatterns=[
    path("", views.houses)
]
  1. views.py 에 view 추가하기
  2. urlconf에도 url 추가해주기
from django.contrib import admin
from django.urls import path, include

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

serializer 파일 만들어주기

pip install djangorestframework
settings.py INSTALLED_APPS에  "rest_framework"를 적어준다.
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ]
}

app 아래에 serilizers.py 파일 만들기

from rest_framework import serializers
from .models import House


class HouseSerializer(serializers.ModelSerializer):
    class Meta:
        model = House
        fields = "__all__"

app 만들기

1. model 만들기

from django.db import models


class Review(models.Model):
    """리뷰 모델"""
    review_id = models.BigAutoField(primary_key=True)  # pk로 설정
    created_time = models.DateField(auto_now_add=True)
    content = models.TextField()
    liked = models.PositiveIntegerField()


class Comments(models.Model):
    """리뷰에 달릴 댓글 모델"""
    comments_id = models.BigAutoField(primary_key=True)  # pk로 설정
    created_time = models.DateField(auto_now_add=True)
    content = models.TextField()

2. view 만들기

from .models import House
from rest_framework.views import APIView
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import HouseSerializer

from django.http.response import HttpResponse
from django.shortcuts import render
from rest_framework import status
from django.http import Http404

from django.shortcuts import get_object_or_404

def getPk(md, pk):
    primaryKey = md.objects.get(pk = pk)
    return primaryKey
    
@api_view(["GET", "POST"])
def houses(request):
    if request.method == "GET":
        all_houses = House.objects.all()
        serializer = HouseSerializer(all_houses, many=True)
        return Response(serializer.data)
    else:
        serializer = HouseSerializer(data=request.data)
        if serializer.is_valid():
            new_house = serializer.save()
            serializer = HouseSerializer(new_house)
            return Response(serializer.data ,status=status.HTTP_201_CREATED)
        return Response(serializer.errors ,status=status.HTTP_400_BAD_REQUEST)

@api_view()
def house(request, pk):
    try:
        house = getPk(House, pk)
    except House.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
    serializer = HouseSerializer(house)
    return Response(serializer.data)
from .models import House2
from rest_framework.views import APIView
from rest_framework.response import Response
from .serializers import HouseSerializer

from django.http.response import HttpResponse
from django.shortcuts import render
from rest_framework import status
from django.http import Http404

from django.shortcuts import get_object_or_404

from rest_framework.viewsets import ModelViewSet
from .serializers import HouseSerializer

from django.core.paginator import Paginator


class HouseViewSet(ModelViewSet):
    serializer_class = HouseSerializer
    queryset = House2.objects.all()

3. urls 만들기

from django.urls import path
from . import views
urlpatterns=[
    path("", views.houses)
]

4. serializers

from rest_framework import serializers
from .models import House2


class HouseSerializer(serializers.ModelSerializer):
    class Meta:
        model = House2
        fields = "__all__"

출처

https://velog.io/@dbsrud11/Django-Python-m1-%ED%99%98%EA%B2%BD

profile
https://github.com/Dingadung

0개의 댓글