1. 마이페이지(바이오 수정)
2. room 앱 생성, room 모델
3. room 메인페이지 띄우기
☝🏻 마이페이지(바이오 수정)
1. core 뷰
# core/views.py
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
#마이페이지
@login_required # 로그인하지 않았으면 접근금지
def mypage(request):
user = request.user # 현재 로그인한 유저
res_data = {}
res_data['user'] = {
'user_id' : user.username, # 회원아이디
'user_nickname' : user.nickname, # 닉네임
'user_name' : user.name, # 닉네임
'user_bio' : user.bio, # 자기소개
}
return render(request, 'mypage.html',res_data)
#마이페이지 수정
@login_required
def mypage_edit(request):
res_data = {}
user = request.user
res_data['user'] = {
'user_id' : user.username, # 회원아이디
'user_nickname' : user.nickname, # 닉네임
'user_name' : user.name, # 닉네임
'user_bio' : user.bio, # 자기소개
}
if request.method == 'POST': # post로 받았을 때
user_bio = request.POST['user_bio']
user.bio = user_bio
user.save() #저장
return redirect('mypage') # 마이페이지로 이동
else:
return render(request, 'mypage_edit.html', res_data)
2. core 템플릿(임시)
- mypage.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>마이페이지</title>
</head>
<body>
<div>
<h3>아이디 : {{ user.user_id }}</h3>
<h3>닉네임 : {{ user.user_nickname }}</h3>
<h3>이름 : {{ user.user_name }}</h3>
<h3>자기소개 : {{ user.user_bio }}</h3>
<button type="button" onclick="location.href='edit/';">프로필 수정</button>
</div>
</body>
</html>
- mypage_edit.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>마이페이지 수정</title>
</head>
<body>
<form method="post">
{% csrf_token %}
<div>
<h3>아이디 : {{ user.user_id }}</h3>
<h3>닉네임 : {{ user.user_nickname }}</h3>
<h3>이름 : {{ user.user_name }}</h3>
<input type="text" name="user_bio" id="user_bio" value="{{ user.user_bio }}">
<input type="submit" value="프로필 저장"></a>
</div>
</form>
</body>
</html>
☝🏻 room 앱
python manage.py startapp room
# core/settings.py
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'core',
'room', # 추가
]
...
#cofig/urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('', include('core.urls')), #core
path('', include('room.urls')), #room
path('admin/', admin.site.urls),
]
1. room.views.py
from django.db import models
from core.models import User
import uuid
class Room(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="내용") #콘텐츠
create = models.DateTimeField(verbose_name='작성일', auto_now_add=True) #작성일
room_owner = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE, verbose_name="방장") #방장
room_password = models.CharField(max_length=5, blank=True, verbose_name="방비밀번호") #방비밀번호
updated = models.DateTimeField(auto_now_add=True)
uuid = models.UUIDField(default=uuid.uuid4)
def __str__(self):
return f'[{self.id}] {self.title} {self.room_owner} {self.room_password}/ {self.create}' # id=id
# 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 목록"
모델 작성 후
python manage.py makemigrations
python manage.py migrate
2. admin.py
from django.contrib import admin
from .models import Room
class room_Admin(admin.ModelAdmin):
list_display = ['id', 'title', 'room_owner' , 'create']
list_display_links = ['id', 'title']
admin.site.register(Room,room_Admin)
☝🏻 room 메인페이지 띄우기, room 추가/수정/삭제
1. room 메인페이지 띄우기
- templates 수정
#core/templates/index.html
...
<section class="main-section section container-fluid">
<div class="container main_content">
<!-- 글 목록 출력 -->
{% if not room %} # room이 없을 경우
<h1>검색결과 없음</h1>
{% endif %}
{% if room %} # room이 있을 경우
{% for r in room %}
<div class="main_con">
<div class="main_content-box">
<div class="oner_box">
<!-- 방장 정보 -->
<div class="oner_box-profile">
<div class="oner_profile">
<img src="../static/images/profile.jpg" alt="">
</div>
<div class="oner_name">
<p>방장 : {{ r.room_owner }}</p>
</div>
</div>
<div class="oner_box-secret">
<div class="oner_profile">
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-key-fill"
viewBox="0 0 16 16">
<path
d="M3.5 11.5a3.5 3.5 0 1 1 3.163-5H14L15.5 8 14 9.5l-1-1-1 1-1-1-1 1-1-1-1 1H6.663a3.5 3.5 0 0 1-3.163 2zM2.5 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2z" />
</svg>
</div>
</div>
<div class="setting_icon">
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" fill="currentColor"
class="bi bi-three-dots" viewBox="0 0 16 16">
<path
d="M3 9.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z" />
</svg>
<!-- 룸 수정/삭제 -->
<div class="setting_icon-modal">
<div class="modal_box">
<p><a href="" class="room_modify">수정</a></p>
<p><a href="" class="room_remove">삭제</a></p>
</div>
</div>
</div>
</div>
<div class="bottom_content">
<h3 class="room_title">방제 : {{ r.title }}</h3> # 방제
<p class="room_content">{{ r.sub_title }}</p> # 부제
<p class="today">{{ r.create | date:"Y-m-d" }}</p> # 작성일
</div>
</div>
<div class="room_btn">
<div class="room_btn-box">
<a href="{{ r.get_absolute_url }}" class="">더보기 ➜</a> # 상세페이지 예정
</div>
</div>
</div>
{% endfor %}
{% endif %}
...
- view.py
#core/views.py
# 메안페이지
@csrf_exempt
def main(request):
room_list = Room.objects.all().order_by('-id') #역순
res_data = {'room' : room_list}
return render(request, 'index.html', res_data)
내일 해야할 것
1. room 추가/수정/삭제
2. room 검색/ room 상세페이지
'FrameWork > Django' 카테고리의 다른 글
8월 29일(월) (0) | 2022.08.31 |
---|---|
8월 26일(금) room 추가/수정/삭제 , room 검색, room 상세페이지 (0) | 2022.08.27 |
8월 23일(화) 프로젝트 시작, 초기 설정, 커스텀 모델, admin, 회원가입 /로그인/로그아웃 기능 (0) | 2022.08.24 |
8월 10일(수) 검색필터 Q (0) | 2022.08.10 |
8월 9일(월) (0) | 2022.08.10 |