17장: 웹 개발

파이썬은 웹 개발을 위한 강력한 도구를 제공합니다. 이 장에서는 파이썬을 사용하여 웹 애플리케이션을 구축하는 방법에 대해 알아보겠습니다. 여기서는 `Flask`와 `Django`라는 두 가지 인기 있는 웹 프레임워크를 다룹니다.


#### 17.1 Flask 소개


`Flask`는 간단하고 유연한 파이썬 웹 프레임워크로, 소규모 프로젝트에 적합합니다. 먼저 `Flask`를 설치해야 합니다.


```sh

pip install Flask

```


##### 17.1.1 기본 Flask 애플리케이션


다음은 기본적인 `Flask` 애플리케이션 예제입니다.


```python

from flask import Flask


app = Flask(__name__)


@app.route('/')

def home():

    return "Hello, Flask!"


if __name__ == '__main__':

    app.run(debug=True)

```


이 코드를 `app.py` 파일로 저장하고 실행하면, 웹 브라우저에서 `http://127.0.0.1:5000/`에 접속할 수 있습니다.


##### 17.1.2 경로와 뷰 함수


경로(Route)는 URL과 연결된 함수입니다. `Flask`에서는 `@app.route` 데코레이터를 사용하여 경로를 정의합니다.


```python

@app.route('/about')

def about():

    return "This is the About page"

```


##### 17.1.3 템플릿 렌더링


`Flask`는 `Jinja2` 템플릿 엔진을 사용하여 HTML 템플릿을 렌더링합니다.


```python

from flask import render_template


@app.route('/hello/<name>')

def hello(name):

    return render_template('hello.html', name=name)

```


`hello.html` 템플릿 파일은 다음과 같습니다:


```html

<!DOCTYPE html>

<html>

<head>

    <title>Hello</title>

</head>

<body>

    <h1>Hello, {{ name }}!</h1>

</body>

</html>

```


##### 17.1.4 폼 데이터 처리


`Flask`를 사용하여 웹 폼 데이터를 처리할 수 있습니다.


```python

from flask import request


@app.route('/submit', methods=['POST'])

def submit():

    name = request.form['name']

    return f"Hello, {name}!"

```


HTML 폼 예제는 다음과 같습니다:


```html

<!DOCTYPE html>

<html>

<head>

    <title>Submit Form</title>

</head>

<body>

    <form action="/submit" method="post">

        <input type="text" name="name" placeholder="Enter your name">

        <input type="submit" value="Submit">

    </form>

</body>

</html>

```


#### 17.2 Django 소개


`Django`는 강력하고 배터리 포함된 파이썬 웹 프레임워크로, 대규모 프로젝트에 적합합니다. 먼저 `Django`를 설치해야 합니다.


```sh

pip install django

```


##### 17.2.1 Django 프로젝트 생성


`Django` 프로젝트를 생성하려면 다음 명령을 실행합니다.


```sh

django-admin startproject myproject

```


##### 17.2.2 Django 애플리케이션 생성


프로젝트 내에서 애플리케이션을 생성하려면 다음 명령을 실행합니다.


```sh

cd myproject

python manage.py startapp myapp

```


##### 17.2.3 URL 구성


`Django`에서 URL 구성은 `urls.py` 파일을 사용합니다.


```python

# myproject/urls.py

from django.contrib import admin

from django.urls import path

from myapp import views


urlpatterns = [

    path('admin/', admin.site.urls),

    path('', views.home, name='home'),

]

```


##### 17.2.4 뷰 함수


`Django`의 뷰 함수는 HTTP 요청을 처리하고 응답을 반환합니다.


```python

# myapp/views.py

from django.http import HttpResponse


def home(request):

    return HttpResponse("Hello, Django!")

```


##### 17.2.5 템플릿 렌더링


`Django`는 템플릿 엔진을 사용하여 HTML 템플릿을 렌더링합니다.


```python

# myapp/views.py

from django.shortcuts import render


def hello(request, name):

    return render(request, 'hello.html', {'name': name})

```


`hello.html` 템플릿 파일은 다음과 같습니다:


```html

<!DOCTYPE html>

<html>

<head>

    <title>Hello</title>

</head>

<body>

    <h1>Hello, {{ name }}!</h1>

</body>

</html>

```


##### 17.2.6 데이터베이스 모델


`Django`는 데이터베이스 모델을 정의하고 관리하는 강력한 ORM을 제공합니다.


```python

# myapp/models.py

from django.db import models


class Person(models.Model):

    name = models.CharField(max_length=100)

    age = models.IntegerField()


    def __str__(self):

        return self.name

```


모델을 데이터베이스에 적용하려면 마이그레이션을 생성하고 적용해야 합니다.


```sh

python manage.py makemigrations

python manage.py migrate

```


##### 17.2.7 관리자 인터페이스


`Django`는 자동으로 생성된 관리자 인터페이스를 제공합니다.


```python

# myapp/admin.py

from django.contrib import admin

from .models import Person


admin.site.register(Person)

```


관리자 인터페이스에 접속하려면, `http://127.0.0.1:8000/admin/`에 접속합니다.


#### 17.3 REST API 구축


`Flask`와 `Django`는 모두 RESTful API를 구축할 수 있습니다. 여기서는 `Flask`와 `Django REST framework`를 사용하여 REST API를 구축하는 방법을 알아보겠습니다.


##### 17.3.1 Flask REST API


`Flask`를 사용하여 간단한 REST API를 구축하는 예제입니다.


```python

from flask import Flask, jsonify, request


app = Flask(__name__)


# 데이터 저장

people = []


@app.route('/people', methods=['GET'])

def get_people():

    return jsonify(people)


@app.route('/people', methods=['POST'])

def add_person():

    person = request.get_json()

    people.append(person)

    return jsonify(person), 201


if __name__ == '__main__':

    app.run(debug=True)

```


##### 17.3.2 Django REST framework


`Django REST framework`는 강력한 REST API 구축을 위한 도구입니다. 먼저 `djangorestframework`를 설치해야 합니다.


```sh

pip install djangorestframework

```


`Django REST framework`를 사용하여 간단한 REST API를 구축하는 예제입니다.


```python

# myapp/serializers.py

from rest_framework import serializers

from .models import Person


class PersonSerializer(serializers.ModelSerializer):

    class Meta:

        model = Person

        fields = ['id', 'name', 'age']


# myapp/views.py

from rest_framework import generics

from .models import Person

from .serializers import PersonSerializer


class PersonListCreate(generics.ListCreateAPIView):

    queryset = Person.objects.all()

    serializer_class = PersonSerializer


# myapp/urls.py

from django.urls import path

from .views import PersonListCreate


urlpatterns = [

    path('people/', PersonListCreate.as_view(), name='people-list-create'),

]

```


`Django`의 설정 파일에 `rest_framework`를 추가합니다.


```python

# myproject/settings.py

INSTALLED_APPS = [

    ...

    'rest_framework',

    'myapp',

]

```


이상으로, 파이썬에서 웹 개발을 수행하는 방법에 대해 알아보았습니다. 다음 장에서는 테스트와 관련된 내용을 더 자세히 알아보겠습니다. 질문이나 요청사항이 있으시면 댓글로 남겨주세요!


---


이 글의 내용은 GoalKicker.com의 Python Notes for Professionals 책을 참조하였습니다.

댓글