기본 프로젝트 생성
필요한 모듈 설치
django-admin startproject second_crud
python -m venv .venv
pip install django==4.2
pip install ipython
pip install django-extensions
pip freeze > requirements.txt
앱 생성하기
python mange.py startapp post
앱 생성 후엔 앱 등록하기
settings.py 파일에서 추가하기
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'post', # 추가
]
templates 디렉토리 생성 후 base.html 파일 만들기
base.html 파일에서 기본 틀 생성하기
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
{% block content %}
{% endblock content%}
</body>
</html>
게시글 작성하기(Create)
index 페이지 만들기
1. urls.py 에 적어주기
from post import views # view 불러오기
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index, name='index'), # 추가해주기
]
2. views.py에서 함수 생성
def index(request):
return render(request, 'index.html')
3. index.html 파일 만들기
post앱 안에 template 디렉토리 생성 후 index.html 파일 생성
{% extends 'base.html' %}
{% block content %}
<h2>Index</h2>
{% endblock content %}
결과
게시글 작성하는 페이지 만들기
1. urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index, name='index'),
path('new/', views.new, name = 'new'), # 여기 추가
]
2. views.py
def new(request):
return render(request, 'new.html')
3. new.html 생성
{% extends 'base.html' %}
{% block content %}
<h2>게시글 작성하기</h2>
<form action="" method="POST">
{% csrf_token %}
<label for="title">제목</label>
<input type="text" id="title" name="title"><br><br>
<label for="content">내용</label>
<textarea name="content" id="content" cols="30" rows="10"></textarea><br><br>
<button type="submit">작성완료</button>
</form>
{% endblock content %}
게시글을 데이터베이스에 저장해야 하기 때문에 데이터베이스에 변화가 생김 -> post 방식 사용
post 방식을 사용하면 csrf token이 필요!
new 페이지
모델 생성하기
models.py 파일에서 클래스 작성해주기
class Post(models.Model):
title = models.CharField(max_length=50) # 제목의 최대 길이 지정
content = models.TextField() # 글 내용
created_time = models.DateTimeField(auto_now_add = True) # 게시글 작성 시간
updated_time = models.DateTimeField(auto_now = True) # 게시글 수정 시간
게시글 생성(저장)하기
1. urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index, name='index'),
path('new/', views.new, name = 'new'),
path('create/', views.create, name = 'create'), # 추가
]
2. views.py
def create(request):
title = request.POST.get('title')
content = request.POST.get('content')
Post.objects.create(title=title, content=content)
return redirect('index')
new에서 작성한 내용을 불러와서 데이터베이스에 저장하기
저장한 후에는 index 페이지로 이동
3. views.py의 index 함수 수정해주기
def index(request):
posts = Post.objects.all().order_by("-updated_time")
context = {
"posts":posts
}
return render(request, 'index.html', context)
데이터베이스에 있는 모든 게시물들을 불러오고,
가장 최신에 업데이트 된 글이 상단에 오도록 order_by 실행
context에 담아 게시글 전달
4. index.html 수정하기
index.html 파일에서 게시글의 제목이 보이도록 수정하기
{% extends 'base.html' %}
{% block content %}
<h2>Index</h2>
<a href="{% url 'new' %}"><button>게시글 작성하러 가기</button></a><br><br><br>
{% for post in posts %}
<p>{{ post.id }} . {{ post.title }}</p><br><br><br>
{% endfor %}
{% endblock content %}
new 페이지에서 게시글을 작성하고 작성 완료 버튼을 누르면 다음과 같은 인덱스 페이지로 이동
상세 게시글 보기 페이지 만들기(Read)
1. urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index, name='index'),
path('new/', views.new, name = 'new'),
path('create/', views.create, name = 'create'),
path('detail/<int:pk>/', views.detail, name = 'detail'), # 추가
]
pk 값으로 해당하는 게시글의 세부 내용을 보기
2. views.py
def detail(request, pk):
post = Post.objects.get(pk=pk)
context = {
"post":post,
}
return render(request, 'detail.html', context)
pk 값을 인자로 받아와서 해당하는 게시글을 찾기
context에 담아 전달하기
3. detail.html
{% extends 'base.html' %}
{% block content %}
<p>제목: {{ post.title }}</p><br>
<p>내용: {{ post.content }}</p><br>
<p>작성시간: {{ post.created_time }}</p>
<p>수정시간: {{ post.updated_time }}</p><br>
<a href="{% url 'index'%} "><button>글 목록으로 가기</button></a>
{% endblock content %}
제목 내용 작성시간 수정시간 보여주기
4. index.html
{% extends 'base.html' %}
{% block content %}
<h2>Index</h2>
<a href="{% url 'new' %}"><button>게시글 작성하러 가기</button></a><br><br><br>
{% for post in posts %}
<a href="{% url 'detail' post.pk %}">{{ post.id }} . {{ post.title }}</a><br><br><br>
{% endfor %}
{% endblock content %}
인덱스 페이지에서 게시글 제목을 누르면 해당 게시글의 내용을 볼 수 있도록 수정
'[내일배움캠프]스파르타코딩클럽 AI 웹개발 > Today I Learned' 카테고리의 다른 글
[내일배움캠프 38일차 TIL] ERD (0) | 2024.08.14 |
---|---|
[내일배움캠프 37일차 TIL] (0) | 2024.08.13 |
[내일배움캠프 35일차 TIL] 장고(Django) 기초2 (0) | 2024.08.09 |
[내일배움캠프 34일차 TIL] 장고(Django) 기초 (0) | 2024.08.08 |
[TIL] 오답노트 (0) | 2024.08.08 |