[Django] 프로젝트 생성부터 CRUD 까지
(프로젝트 명은 myproject, 앱 명은 blog 사용하겠습니다!)
🎈 가상환경 생성 및 프로젝트 생성
가상환경 생성 및 켜기
- 가상환경 생성
python -m venv <가상환경_이름>
- 가상환경 켜기
source <가상환경_이름>/Scripts/activate
장고 설치 및 프로젝트 / 앱 설정
- 장고 설치
pip install django
- 프로젝트 생성
django-admin startproject myproject
- 앱 생성
cd <프로젝트명>
python manage.py startapp blog
settings.py
에 앱 등록
INSTALLED_APPS = [
'blog',
]
static / media 관련 설정
- static 설정
#settings.py
import os
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'blog', 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
- media 설정
#settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#myproject/urls.py
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
templates 관련 설정
-
blog/templates/blog
폴더 생성 -
settings.py
에 templates 경로 설정
TEMPLATES = [
'DIRS': [
os.path.join(BASE_DIR, 'myproject', 'templates')
]
]
데이터베이스 초기화
python manage.py migrate
🎈 모델 생성 및 admin 등록
- 모델 생성
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date = models.DateTimeField(auto_now_add=True)
- 마이그레이션 파일 생성
python manage.py makemigrations
- 마이그레이션 적용
python manage.py migrate
- admin 등록
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
pass
🎈 Create
html form 사용
templates/blog/home.html
<a href="{% url 'new' %}">새 글 작성하기 HTML form</a>
templates/blog/new.html
<form action="{% url 'create' %}" method="POST">
{% csrf_token %}
<label for="title">제목</label>
<input type="text" name="title">
<label for="content">본문</label>
<textarea name="content" id="" cols="30" rows="10"></textarea>
<input type="submit" value="제출">
</form>
views.py
from .models import Post
from django.utils import timezone
def new(request):
return render(request, 'blog/new.html')
def create(request):
if request.method == 'POST':
post = Post()
post.title = request.POST['title']
post.content = request.POST['content']
post.date = timezone.now()
post.save()
return redirect('home')
urls.py
from . import views
urlpatterns = [
path('new/', views.new, name='new'),
path('create/', views.create, name='create'),
]
Django Form 사용
templates/blog/home.html
<a href="{% url 'form' %}">새 글 작성하기 django form</a>
forms.py
생성하기
from django import forms
class PostForm(forms.Form):
title = forms.CharField()
content = forms.CharField(widget = forms.TextArea)
views.py
from .forms import PostForm
def form(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
post = Post()
post.title = form.cleaned_data['title']
post.content = form.cleaned_data['content']
post.save()
return redirect('home')
else:
form = PostForm()
return render(request, 'blog/form_create.html', {'form': form})
form.html
<form action="" method="POST">
{% csrf_token %}
<table>
{{form.as_table}}
</table>
<input type="submit" value="제출">
</form>
Django Model Form 사용
templates/blog/home.html
<a href="{% url 'modelForm' %}">새 글 작성하기 django model form</a>
urls.py
urlpatterns = [
path('modelForm', views.modelForm, name='modelForm')
]
forms.py
생성하기
from django import forms
from .models import Post
class PostModelForm(forms.ModelForm):
class Meta:
model = Post
#fields = '__all__'
fields = [title, content]
views.py
from .forms import PostModelForm
def modelForm(request):
if request.method == 'POST':
form = PostModelForm(request.POST)
if form.is_valid():
form.save()
return redirect('home')
else:
form = PostModelForm()
return render(request, 'blog/form.html', {'form': form}
🎈 Read
detail page를 가져오는 부분
urls.py
from . import views
urlpatterns = [
path('detail/<int:post_id>', views.detail, name='detail'),
]
views.py
from django.shortcuts import get_object_or_404
from .models import Post
def detail(request, post_id):
post = get_object_or_404(Post, pk=post_id)
return render(request, 'detail.html', {'post': post}
detail.html
<div>{{post.id}}</div>
<div>{{post.title}}</div>
<div>{{post.content}}</div>
🎈 Update
추가 예정
🎈 Delete
추가 예정
Author And Source
이 문제에 관하여([Django] 프로젝트 생성부터 CRUD 까지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@chldppwls12/html-form-django-form-django-model-form저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)