해야할 것
- 마이페이지 만들기
- 로그인일 경우 글쓰기 가능/ 로그아웃일 경우 로그인하라는 문구와 로그인 페이지 이동
- 포스팅 모델에 작성자 필드 추가
- 글 삭제
☝🏻 작성자 필드 추가하기
1. 포스팅 목록
#room/models.py
from django.db import models
from core.models import User
class Posting(models.Model):
title = models.CharField(max_length=50, verbose_name="제목") #제목
sub_title = models.CharField(max_length=100, blank=True, verbose_name="부제목") #부제목
content = models.TextField(verbose_name="내용") #콘텐츠
writer = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE,verbose_name="작성자") #작성자
create = models.DateTimeField(verbose_name='작성일', auto_now_add=True) #작성일
update = models.DateTimeField(verbose_name="수정일", auto_now=True) #수정된 시간만 수정
def __str__(self):
return f'[{self.id}] {self.title} / {self.create}' # id=id
def get_absolute_url(self): #어드민에서 게시글 바로 볼 수 있음
return f'room_page/{self.id}/'
class Meta:
verbose_name = "room 목록"
verbose_name_plural = "room 목록"
- writer = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE,verbose_name="작성자")
verbose_name-> admin 페이지에서 조회할 때, 필드명 대신 알아보기 쉬운 단어로 지정
ForeignKey = 모델의 1:n 관계성을 말함 (작성자:타이틀,내용,작성일...등등 으로 이해함)
ㅊㅊ -> https://dev-navill.tistory.com/6
on_delete 는 외래키(ForeignKey)가 바라보는 테이블의 값이 삭제될 때 수행할 방법을 지정
models.CASCADE = 외래키를 포함하는 행도 삭제
ㅊㅊ -> https://076923.github.io/posts/Python-Django-11/
#room/room_list.html
...
% for p in posts %}
<div class="w-full h-64 flex flex-col justify-between bg-gray-50 bg-whsite rounded-lg border mb-6 py-5 px-4">
<div>
<h4 class="text-gray-800 dark:text-gray-900 leading-7 w-11/12 font-bold mb-3">{{ p.title }}</h4>
<p class="text-gray-600 dark:text-gray-900 text-sm">{{ p.writer }}</p> #작성자 추가
<p class="text-gray-600 dark:text-gray-900 text-sm">{{ p.sub_title }}</p>
<p class="text-gray-600 dark:text-gray-900 text-sm">{{ p.content }}</p>
</div>
...
2. 포스팅 상세 페이지 작성자
views.py는 수정안해도 되고, htm에 작성자 추가해주기
#room/room_page.html
{% extends 'base.html' %}
{% block title %}{{ posts.title }} | {% endblock %}
{% block content %}
<h1>작성자 : {{ posts.writer }}</h1> # 작성자 추가
<h1>제목 : {{ posts.title }}</h1>
<h1>서브제목 : {{ posts.sub_title }}</h1>
<h1>내용 : {{ posts.content }}</h1>
<h1>작성일 : {{ posts.create }}</h1>
<h1>수정일 : {{ posts.update }}</h1>
{% endblock %}
☝🏻 글을 쓰려면 로그인부터 !
글쓰기 버튼을 누를 시
- 로그인 경우 -> 글쓰기 페이지 이동
- 로그인 상태가 아닌 경우 -> 로그인 페이지 이동
#room/views.py
@login_required
def room_add(request):
...
@login_required -> 익명의 사용자라는 것을 확인하면 로그인 페이지로 넘어감
함수형뷰에선 사용할 수 있지만 클래스형뷰에선 사용 못함
ㅊㅊ -> https://practice-a-lot.tistory.com/80
☝🏻 마이페이지 구현하기
1. 뷰 추가해주기
#core/views.py
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required #익명의 사용자일 경우 로그인페이지 이동
#모델 가져오기
from .models import User
from room.models import Posting
#마이페이지
@login_required
def mypage(request):
user = request.user
res_data = {}
res_data['posts'] = {
'user_id' : user.username, # 회원아이디
'user_nickname' : user.nickname, # 닉네임
'user_name' : user.name, # 닉네임
'user_bio' : user.bio, # 자기소개
}
print(res_data)
return render(request, 'mypage.html',res_data)
user = request.user user 필드에 request.user에 저장
3. url 추가
# core/urls.py
from django.contrib.auth import views as auth_views
from django.urls import path
from . import views
urlpatterns = [
...
path('mypage/', views.mypage, name='mypage'), #마이페이지
...
]
3. 템플릿 추가하기
- 내비게이션바 추가하기
#room/nav.html
...
<!-- 로그인/로그아웃 했을 경우 회원의 현재 활동 가능 상태를 판단하는 제어문 -->
<div class="flex items-center space-x-4 py-4 lg:px-12">
{% if request.user.is_authenticated %}
<div class="overflow-hidden relative w-10 h-10 bg-gray-100 rounded-full dark:bg-gray-600">
<a href="{% url 'mypage' %}"><svg class="absolute -left-1 w-12 h-12 text-gray-400" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clip-rule="evenodd"></path></svg></a>
</div>
<a href="/logout/" class="px-5 py-3 rounded-xl text-white bg-blue-600 hover:bg-blue-700">Log out</a>
{% else %}
<a href="/login/" class="text-white hover:text-gray-200">Log in</a>
<a href="/signup/" class="px-5 py-3 rounded-xl text-white bg-blue-600 hover:bg-blue-700">Sign up</a>
{% endif %}
</div>
- 마이페이지 추가하기
#core/mypage.html
{% extends 'base.html' %}
{% block title %}마이페이지 | {% endblock %}
{% block content %}
<h1>배경이미지</h1>
<h1>프로필이미지</h1>
<hr>
<h1>아이디 : {{ posts.user_id }}</h1>
<h1>닉네임 : {{ posts.user_nickname }}</h1>
<h1>이름 : {{ posts.user_name }}</h1>
{% if posts.user_bio %} # 소개글이 있을 경우
<h1>소개글 : {{ posts.user_bio }}</h1>
{% else %} # 소개글이 없을 경우
<h1>소개글 : 없음</h1>
{% endif %}
<hr>
<h1>가입된 스터디목록 : </h1>
{% endblock %}
해야할 것
1. 글 삭제
'FrameWork > Django' 카테고리의 다른 글
7월 27일(수) 게시글 작성자 (0) | 2022.07.28 |
---|---|
7월 25일(월) 글삭제/글수정 (0) | 2022.07.26 |
7월 20(수) 상세페이지 만들기 (0) | 2022.07.21 |
7월 19일(화) (0) | 2022.07.20 |
7월 18일(월) (0) | 2022.07.19 |