[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.)