Python 학습: 웹 개발
Python을 사용하여 웹 개발을 할 수 있는 다양한 프레임워크가 있습니다. 이번 글에서는 Flask를 사용한 간단한 웹 애플리케이션 작성, Django의 프로젝트 구조와 주요 구성 요소, 그리고 RESTful API를 구현하는 방법에 대해 알아보겠습니다.
1. Flask: 간단한 웹 애플리케이션 작성
Flask는 경량 웹 프레임워크로, 간단하고 유연하게 웹 애플리케이션을 작성할 수 있습니다.
Flask 설치 : pip install Flask
간단한 웹 애플리케이션 작성:
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, Flask!"
@app.route('/about')
def about():
return "This is the about page."
if __name__ == '__main__':
app.run(debug=True)
위의 예제에서 Flask 애플리케이션을 생성하고, 두 개의 라우트('/'와 '/about')를 정의했습니다. 애플리케이션을 실행하면 지정된 라우트로 접근할 수 있습니다.
2. Django: Django 프로젝트 구조, 앱 생성, 모델, 뷰, 템플릿
Django는 강력한 기능을 제공하는 웹 프레임워크로, 복잡한 웹 애플리케이션을 쉽게 개발할 수 있습니다.
Django 설치 : pip install django
Django 프로젝트 생성 : django-admin startproject myproject
cd myproject
Django 앱 생성 : python manage.py startapp myapp
Django 프로젝트 구조:
manage.py
myproject/
__init__.py
settings.py
urls.py
wsgi.py
myapp/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
migrations/
__init__.py
templates/
myapp/
home.html
모델 정의 (myapp/models.py):
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
published = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
마이그레이션 수행 : python manage.py makemigrations
python manage.py migrate
뷰 정의 (myapp/views.py):
from .models import Article
def home(request):
articles = Article.objects.all()
return render(request, 'myapp/home.html', {'articles': articles})
URL 설정 (myproject/urls.py):
from django.urls import path
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
]
템플릿 작성 (myapp/templates/myapp/home.html):
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Articles</h1>
<ul>
{% for article in articles %}
<li>{{ article.title }} - {{ article.published }}</li>
{% endfor %}
</ul>
</body>
</html>
위의 예제에서 Django 프로젝트를 생성하고, 앱을 생성한 후 모델, 뷰, 템플릿을 정의하여 기본적인 웹 애플리케이션을 구성했습니다.
3. API: RESTful API, Flask-RESTful, Django REST framework
RESTful API는 웹 서비스의 상호 운용성을 높이기 위한 아키텍처 스타일입니다. Flask와 Django에서는 RESTful API를 쉽게 구현할 수 있는 라이브러리를 제공합니다.
Flask-RESTful : Flask-RESTful은 Flask 애플리케이션에서 RESTful API를 구현할 수 있도록 도와주는 확장입니다.
Flask-RESTful 설치 : pip install flask-restful
Flask-RESTful 예제:
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class HelloWorld(Resource):
def get(self):
return {'message': 'Hello, World!'}
api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
app.run(debug=True)
위의 예제에서 HelloWorld 클래스를 정의하고, get 메서드를 통해 GET 요청을 처리합니다. api.add_resource를 사용하여 리소스를 경로에 매핑합니다.
Django REST framework : Django REST framework는 Django에서 RESTful API를 쉽게 구축할 수 있도록 도와주는 강력한 도구입니다.
Django REST framework 설치 : pip install djangorestframework
Django 설정 (myproject/settings.py):
...
'rest_framework',
'myapp',
]
시리얼라이저 정의 (myapp/serializers.py):
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ['id', 'title', 'content', 'published']
뷰 정의 (myapp/views.py):
from .models import Article
from .serializers import ArticleSerializer
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
URL 설정 (myproject/urls.py):
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from myapp.views import ArticleViewSet
router = DefaultRouter()
router.register(r'articles', ArticleViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(router.urls)),
]
위의 예제에서 Django REST framework를 사용하여 Article 모델에 대한 API를 생성했습니다. ArticleSerializer를 정의하고, ArticleViewSet을 통해 CRUD 작업을 구현했습니다. DefaultRouter를 사용하여 API 엔드포인트를 설정했습니다.
이 글에서는 Python을 사용한 웹 개발에 대해 알아보았습니다. Flask를 사용한 간단한 웹 애플리케이션 작성, Django의 프로젝트 구조와 주요 구성 요소, 그리고 RESTful API를 구현하는 방법을 이해하고 활용하면 더 복잡한 웹 애플리케이션을 쉽게 개발할 수 있습니다. Happy Coding!
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 14. Python의 "머신러닝" (0) | 2024.06.18 |
---|---|
[Python] 13. Python의 "데이터 분석 및 시각화" (0) | 2024.06.18 |
[Python] 11. Python의 "데이터베이스" (0) | 2024.06.18 |
[Python] 10. Python의 "고급 주제" (0) | 2024.06.18 |
[Python] 9. Python의 "표준 라이브러리와 외부 패키지" (0) | 2024.06.18 |