본문 바로가기
Python 문법/Python 기본 문법(3.10 기준)

[python3.10 기본] 22. 웹 개발

by cogito21_python 2024. 7. 2.
반응형

22.1 웹 프레임워크 개요 (Django, Flask 등)

Django

Django는 완전한 기능을 갖춘 고수준의 웹 프레임워크로, 신속한 개발과 간결한 디자인을 목표로 합니다. Django는 ORM, 관리자 인터페이스, 인증 시스템 등을 기본으로 제공합니다.

 

Django 설치 및 프로젝트 생성

pip install django
django-admin startproject mysite
cd mysite
python manage.py startapp myapp

Django 프로젝트 구조

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    myapp/
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        views.py

기본 뷰 작성

# myapp/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, Django!")

URL 설정

# mysite/urls.py
from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index),
]

서버 실행

python manage.py runserver

Flask

Flask는 간단하고 유연한 마이크로 웹 프레임워크로, 확장이 용이하며 가볍습니다. Flask는 기본적으로 최소한의 기능만 제공하고, 필요한 기능을 플러그인 형태로 추가할 수 있습니다.

 

Flask 설치 및 기본 애플리케이션 생성

pip install flask
# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Flask!"

if __name__ == '__main__':
    app.run(debug=True)

서버 실행

python app.py

22.2 RESTful API 개발

RESTful API는 HTTP 프로토콜을 사용하여 웹 리소스를 관리하는 방식입니다. Flask와 Django에서 RESTful API를 개발하는 방법을 살펴보겠습니다.

Flask에서 RESTful API 개발

Flask와 Flask-RESTful 설치

pip install flask flask-restful

기본 RESTful API 작성

# app.py
from flask import Flask, request
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

    def post(self):
        data = request.get_json()
        return {'you sent': data}, 201

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
    app.run(debug=True)

Django에서 RESTful API 개발 (Django REST framework 사용)

Django REST framework 설치

pip install djangorestframework

Django 설정 파일에 추가

# mysite/settings.py
INSTALLED_APPS = [
    ...
    'rest_framework',
]

Serializer와 View 작성

# myapp/serializers.py
from rest_framework import serializers
from .models import MyModel

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = '__all__'
# myapp/views.py
from rest_framework import viewsets
from .models import MyModel
from .serializers import MyModelSerializer

class MyModelViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

URL 설정

# mysite/urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from myapp import views

router = routers.DefaultRouter()
router.register(r'mymodel', views.MyModelViewSet)

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

22.3 데이터베이스 연동

파이썬 웹 프레임워크는 데이터베이스와 쉽게 연동할 수 있는 기능을 제공합니다. Django와 SQLAlchemy를 사용한 예를 살펴보겠습니다.

Django ORM 사용

Django ORM(Object-Relational Mapping)은 데이터베이스 연동을 간편하게 해주는 도구입니다.

 

모델 정의

# myapp/models.py
from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()

    def __str__(self):
        return self.name

마이그레이션 생성 및 적용

python manage.py makemigrations
python manage.py migrate

데이터베이스 조작

# myapp/views.py
from django.shortcuts import render
from .models import MyModel

def index(request):
    items = MyModel.objects.all()
    return render(request, 'index.html', {'items': items})

SQLAlchemy 사용

SQLAlchemy는 파이썬의 강력한 ORM 라이브러리입니다.

 

SQLAlchemy 설치

pip install sqlalchemy

기본 사용법

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine('sqlite:///example.db', echo=True)
Base = declarative_base()

class MyModel(Base):
    __tablename__ = 'mymodel'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    description = Column(String)

Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

new_item = MyModel(name='Item1', description='This is item 1')
session.add(new_item)
session.commit()

items = session.query(MyModel).all()
for item in items:
    print(item.name)

 

반응형