아직 구현x
- 만든 방이 없을 경우 아직 방이 없다는 거 보여지기
- -가입된 스터디 목록탭 구현하기
☝🏻 룸 생성페이지
☝🏻 룸 수정페이지
- 공개방이 비밀방으로 비밀방이 공개방으로 변경 x
1. view
#room/views.py
# 글 수정
@login_required
def room_edit(request,pk):
res_data = {}
try:
room = Room.objects.get(pk=pk)
except:
return render(request, 'room_edit.html', {'error' : "잘못된 접근입니다."})
user = request.user # 현재 로그인되어있는 유저
room_owner = room.room_owner # 포스팅 작성한 유저
res_data['room_owner'] = room_owner
if user == room_owner:
if request.method == 'POST':
res_data['room'] = room
title = request.POST['title']
sub_title = request.POST['sub_title']
content = request.POST['content']
room_password = request.POST['room_password']
if not title:
res_data['error'] = "제목을 입력 해주세요"
if not sub_title:
res_data['error'] = "부제목을 입력 해주세요"
if not content:
res_data['error'] = "내용을 입력 해주세요"
if (title and sub_title and content): #모두 입력했을 때
room.title = title
room.sub_title = sub_title
room.content = content
room.save() #저장
return redirect('main') # 메인페이지 이동
else:
res_data['error'] = "에러발생 모든 내용을 입력 해주세요"
return render(request, 'room_edit.html', res_data)
elif request.method == 'GET':
res_data['room'] = room
return render(request, 'room_edit.html', res_data)
else:
return render(request, 'index.html', {"error" : "권한이 없습니다."})
2. url
#room/urls.py
from django.urls import path
from . import views
urlpatterns = [
...
path('room/edit/<int:pk>',views.room_edit, name="room_edit"), #글수정
...
]
3. html
#room_edit.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>스터디룸 | 모집글 수정</title>
<link rel="stylesheet" href="/static/css/room_page.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
</head>
<body>
<!-- nav -->
<nav class="navbar navbar-expand-lg ">
<div class="container-fluid padding-none">
<div class="nav_left">
<a class="navbar-brand" href="/">스ㅌㅓ디룸</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="collapse navbar-collapse nav_right" id="navbarSupportedContent">
<!-- 검색창 -->
<form class="d-flex main_search_form" role="search" action="{% url 'search' %}" method="get">
<div class="form_btnbox">
<input class="form-control" type="search" placeholder="스터디 모집 찾기" aria-label="Search" name="q"
value="{{ q }}">
<button class="btn" type="submit">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor"
class="bi bi-search" viewBox="0 0 16 16">
<path
d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z" />
</svg>
</button>
</div>
</form>
<!-- 로그인/로그아웃 했을 경우 유저의 현재 활동 가능 상태를 판단하는 제어문 -->
<ul class="navbar-nav nav-ul">
{% if request.user.is_authenticated %}
<li class="nav-item">
<a class="mypage">{{ request.user }}</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown"
aria-expanded="false">
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/mypage/">마이페이지</a></li>
<li><a class="dropdown-item" href="/logout/">로그아웃</a></li>
</ul>
</li>
{% else %}
<li class="nav-item">
<a class="login" href="/login/">로그인</a>
</li>
<li class="nav-item">
<a class="resigter" href="/resigter/">회원가입</a>
</li>
{% endif %}
</ul>
</div>
</div>
</nav>
<!-- nav end -->
<div class="mx-auto container py-20 px-6">
<form method="post">
{% csrf_token %}
<div class="bg-white shadow-lg border p-3 rounded-lg">
<div class="border-b mb-3 flex justify-between text-sm">
<div class="text-blue-600 flex items-center pb-2 pr-2 border-b-2 border-blue-600 uppercase">
<a href="#" class="font-semibold inline-block">info</a>
</div>
<!-- 수정/뒤로가기 -->
<!-- {% if request.user == room.room_owner %} -->
<div class="setting_icon-modal">
<div class="modal_box">
<input type="submit"
class="text-white bg-gradient-to-r from-cyan-500 to-blue-500 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-cyan-300 dark:focus:ring-cyan-800 font-medium rounded-full text-sm px-3 py-2.5 text-center mr-2 mb-2"
value="수정하기"></a>
</button>
<button type="button">
<a href="/"
class="text-white bg-gradient-to-r from-cyan-500 to-blue-500 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-cyan-300 dark:focus:ring-cyan-800 font-medium rounded-full text-sm px-3 py-2.5 text-center mr-2 mb-2">뒤로가기</a>
</button>
</div>
</div>
<!-- {% endif %} -->
</div>
<div class="grid grid-cols-1 lg:grid-cols-2 gap-5">
<div class="w-full">
<div
class="mt-3 bg-white rounded-b lg:rounded-b-none lg:rounded-r flex flex-col justify-between leading-normal">
<div>
<!-- 공개방/비밀방 -->
{% if room.room_password %}
<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>
{% endif %}
<!-- 제목/부제목/내용 -->
<div>
<a
class="text-gray-900 font-bold text-lg mb-2 hover:text-blue-600 transition duration-500 ease-in-out">
<label for="title">제목 :</label><br>
<input type="text" name="title" id="title" value="{{ room.title|safe }}"></a>
</div>
<div class="room-content">
<p>부제목 :</p>
<input type="text" name="sub_title" id="sub_title"
value="{{ room.sub_title|safe }}">
</div>
<div class="room-content">
<p>내용 :<span style="color: #fff"></span></p>
<textarea name="content" id="content" class="room-textarea"
placeholder="내용을 입력해주세요.">{{ room.content|safe }}</textarea>
</div>
<div class="secret_create-check">
<div class="create-check-box">
<p>비밀방 생성하기</p>
<input type="checkbox" class="create-check-btn">
</div>
<input type="number" name="room_password" id="room_password"
class="password_setting" placeholder="숫자5자리를 입력해주세요." maxlength="5"
value="{{ room.room_password|safe }}" oninput="numberMaxLength(this)">
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://kit.fontawesome.com/5c2f488d06.js" crossorigin="anonymous"></script>
<script src="https://unpkg.com/flowbite@1.5.1/dist/flowbite.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js"
integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa"
crossorigin="anonymous"></script>
</body>
</html>
'FrameWork > Django' 카테고리의 다른 글
(Django) admin page 수정하기 (0) | 2023.05.26 |
---|---|
AWS EC2, Ubuntu에서 Django 프로젝트 배포하기 - 1) 인스턴스 생성 , 우분투 접속, anaconda 설치 (1) | 2023.05.22 |
룸 상세페이지 (1) | 2022.09.23 |
마이페이지 (1) | 2022.09.23 |
9월 15일 (목) 질문 (0) | 2022.09.16 |