Server/Python

django) 장고 시작하기

Juzdalua 2023. 9. 22. 15:31

* 개념

django는 python의 프레임워크 중 하나이다.

 

java - spring

node - express

python - django

 

* 설치 및 실행

# 설치
sudo pip3 install django

# 버전확인
python -m django --version

# 프로젝트 만들기
mkdir [PROJECT_PATH]
cd [PROJECT_PATH]

# 프로젝트 생성
django-admin startproject [PROJECT_NAME] .

 

# 실행 - default port 8000
python manage.py runserver

# port
python manage.py runserver [PORT]

 

* 앱 만들기

django-admin startapp [APP_NAME]

아래 라우팅을 위해 myapp 폴더에 urls.py 파일을 생성한다.

 

* 라우팅

url.py 파일에 urlpatterns를 지켜서 만들어야한다.

include를 사용하면 해당 앱마다 라우팅을 지정할 수 있다.

# study/urls.py

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

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

from django.urls import path
from myapp import views

urlpatterns = [
    path('', views.home),
    path('create/', views.create),
    path('read/<id>', views.read),
]
# myapp/viwes.py

import random
from django.shortcuts import render, HttpResponse

# Create your views here.
def home(request):
  return HttpResponse('''
    Hello World!
  ''');

def create(request):
  return HttpResponse('<h1>Create</h1>' + str(random.random()));

def read(request, id):
  return HttpResponse('Read ' + id);

 

* DB 연결

# 설치
pip install mysqlclient

 

# .env
DATABASE_HOST=localhost
DATABASE_USER=root
DATABASE_PASS=
DATABASE_NAME=test

 

# settings.py

...

from dotenv import load_dotenv
import os

load_dotenv()

...

INSTALLED_APPS = [
    ...

    'myapp'
]

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.getenv('DATABASE_NAME'),
        'HOST': os.getenv('DATABASE_HOST'),
        'PORT': '3306',
        'USER': os.getenv('DATABASE_USER'),
        'PASSWORD': os.getenv('DATABASE_PASS'),
    },
}

...

 

테이블 생성

 

# myapp/models.py

from django.db import models

# Create your models here.
class MyTable(models.Model):
  id = models.AutoField(primary_key=True)
  name = models.TextField()
  age = models.IntegerField()

  class Meta:
    db_table = 'MyTable'

 

# myapp/serializers.py

from rest_framework import serializers

from myapp.models import MyTable

class MyTableSerializer(serializers.ModelSerializer):
    id = serializers.PrimaryKeyRelatedField(read_only=True)
    class Meta:
        model = MyTable
        fields = '__all__'

 

# myapp/views.py

from rest_framework.decorators import api_view
from django.shortcuts import HttpResponse
from myapp.models import MyTable
from myapp.serializers import MyTableSerializer

# Create your views here.
@api_view(['GET'])
def read(request, id):

  dataModel = MyTable.objects.all()
  selectModel = MyTable.objects.filter(name = 'jun')

  result1 = MyTableSerializer(dataModel, many=True)
  print(result1.data)

  result2 = MyTableSerializer(selectModel, many=True)
  print(result2.data[0])
  jun = result2.data[0]['name']
  print(jun)

  return HttpResponse('Read ' + id);

 

 

참고) 생활코딩 장고 강의

https://www.youtube.com/watch?v=pbKhn2ten9I&list=PLuHgQVnccGMDLp4GH-rgQhVKqqZawlNwG&index=1 

 

'Server > Python' 카테고리의 다른 글

Python3) M1에 설치되어있는 파이썬 사용하기  (0) 2023.03.08