vscode를 이용한 웹구축(html)

django를 이용한 (게시글,댓글) 수정,삭제 , 간단한 유지보수작업

LRWoo 2023. 4. 29. 17:34
728x90
반응형

2023.04.23 - [파이썬을 이용한 웹구축] - python migrations, 게시글작성자노출,수정,삭제 구현

 

python migrations, 게시글작성자노출,수정,삭제 구현

2023.04.23 - [파이썬을 이용한 웹구축] - 파이썬 장고 로그인,회원가입구현하기 파이썬 장고 로그인,회원가입구현하기 admin 계정으로 로그인을 해보면 이렇게 accounts profile을 찾을 수 없다는 에러가

ji7290.tistory.com

 

가상환경동작해서 서버를 열어준다.

 

q_detail.html로 가자 

 

게시글 부분에 

삭제 버튼을 추가해준다.

q_detail.html

삭제를 할때 확인 과정을 거친다.

<a href="javascript:void(0)" class="delete btn btn-sm btn-outline-secondary"
                            data-uri="{% url 'board:d_question' question.id %}">삭제</a>

javascript.void(0)은 눌렀을때 아무런동작 하지않게 만들어준것

자바스크립트의 결과물로 url연결되도록 만들어 놓은 것이다.

저 data-uri에 넣어놓은 것이

 

base.html로가서 자바스크립트 코드를 별도의 영역에 만들어서 스크립트를 쓸 수 있게 만들어준다.

base.html

 

 

q_detail로 가서 자바스크립트를 작성해준다.

q_detail.html

    data-uri="{% url 'board:d_question' question.id %}">삭제</a>

base.html에 data-uri에 넣어놓은 것이

q_detail에 위 코드이다. 

 

data-uri에 등록해놓은 board_d_question을 만들어주자. 

 

board-urls.py에가서 경로추가하기 

path('question/delete/<int:question_id>/', views.d_question, name='d_question'),

 

board-views.py에 함수만들어주기

 

d_question함수 생성

board-views.py

 

이제 웹으로가서 삭제가 잘되는지 확인해보자

 

test3로 로그인한 뒤 삭제용 더미게시글 하나를 작성한다.

 

 

삭제가 잘된다.

 

 

 

댓글 수정,삭제를 해보자

 

q_detail로가자

댓글영역에 수정링크를 만들어준다.

 <div class="my-3">
                {% if request.user == answer.author %}
                <a href="{% url 'board:m_answer' answer.id %}" class="btn btn-sm btn-outline-secondary">수정</a>
                {% endif %}

            </div>

 

저 url이 없기때문에 m_answer를 만들어주자

 

urls.py로 가서 

path('answer/modify/<int:answer_id>/', views.m_answer, name='m_answer'),

경로추가해주기 

 

 

 

우선 views에서 answer를 import시켜주자

이제 board-views.py로가서 m_answer함수 추가해주기

 

지금은 댓글을 수정하는 폼인 a_form.html이 없기때문에 메서드요청 방식이 get방식으로 전달된다. 

페이지에 get방식으로 링크만 연결시켜준 상태 .

 

 

 

 

이제 a_form.html을 만들어주자 

base.html을 쓸 것이다. 

 

 

요청메서드방식post

csrt_token 보안토큰 

form_errors를 import시켜서쓸것이다.

답변을 수정할 폼 생성주었다.

 

테스트해보자

test3로 수정할 댓글하나를 작성해주고 

 

test3로 로그인을 했기에 작성자와 유저가 일치해야 댓글이 수정,삭제된다.

 

 

수정버튼을 눌렀을때 modify/10으로 정수형으로 경로를 할당해주었기때문에 

path('answer/modify/<int:answer_id>/', views.m_answer, name='m_answer'),

board -urls.py에 추가된 경로와 웹사이트에 url이 맞아떨어진다(필수)

 

이제 댓글 삭제를 해보자 

 

q_detail로가서 수정버튼 밑에 삭제링크를 추가시켜주자

 <a href="{% url 'board:m_answer' answer.id %}" class="btn btn-sm btn-outline-secondary">수정</a>
                <a href="#" class="delete btn btn-sm btn-outline-secondary"
                    data-uri="{% url 'board:d_answer' answer.id %}">삭제</a>

삭제는 uri로 d_answer로 answer_id를 삭제시켜준다.

 

마찬가지로 urls.py ->urls pattern으로 가서 path추가시켜주기 

 path('answer/delete/<int:answer_id>/', views.d_answer, name='d_answer'),

delete에 int형으로 댓글작성_id경로를 정수형으로 추가시켜주고 

이름 d_answer로 지정해준다.

 

views.py로가서 함수만들어주자

@login required는 만약로그인이 안되어있다면 로그인을 시켜주고 

answer에다가 매개변수로 Answer를 할당시켜주고 

만약에  요청하는 유저가 author(작성자)가 아니라면 

삭제권한이 없습니다라는 메세지를 띄워주고  요청하는 유저가 작성자라면 

delete함수를 동작시켜서 삭제시켜준다.

 

 

웹으로 돌아가서test3에 로그인을 한뒤 직접 쓴 댓글을 삭제시켜준다.

 

 

삭제가 성공적으로 잘됐다.

 


 

이제 수정을 했을때 수정된시간을 알려줘야 될것이다.

 

게시글부터 만들어보자 

 

q_detail로 가서  게시글 영역에 추가해준다.

q_detail.html 게시글영역

 

 

 

조건문을 사용해서 question.modify_date로 수정된시간을 나타내준다.

 

 

 

 

 

댓글에도 수정된날짜가 표시되게 만들어보자 

 

마찬가지로 q_detail.html에서 댓글영역에서 조건문으로 수정된날짜를 추가시켜준다.

{% if not answer.modify_date %}
                    <div>{{ answer.create_date }}</div>
                    {% else %}
                    <div>{{ answer.modify_date }}수정됨</div>
                    {% endif %}

 

 


이제 views.py를 쪼개보자 

물론 함수가 어떤페이지 기능의 영역인지 알 수있지만 

페이지가 늘어나고 구문이 많아지게 되면  간결한 유지보수에 큰 영향을 끼친다.

 

 

 

board에 views폴더를 생성한다.

 

views에 basic_views.py를 만들어준다.

 

board-views.py에 있던 index, detail함수를 basic.py로 복사시켜준다.

index와 detail에 있던 객체를 import시켜준다.

 

views폴더에 question_views.py 를 생성해준다.

from ..forms import QuestionForm

이 (..)쩜쩜은 한계단 상위폴더에 있는 코드를  import시켜준다는 의미이다. 

 

 

question_views.py에는 

views.py에 있는  c_question, m_question, d_question함수를 가져와 붙여넣기해준다.

 

 

 

 

view폴더에 마찬가지로   answer _views.py를 똑같이 만들어준다.

 

 

answer_views.py에 answer관련함수들만 붙여넣기 해준다.

 

이제 views폴더에있는 파일들을 써야하는데 

 

 

views폴더에 __init__.py파일을 생성해주자

 

 

views폴더 안에있는 views.py를 init에서 해당함수들을 전부 갖다쓸 수 있게 만들어놨다

 

 

 

이제  board- views.py를 임시로 이름을 바꿔서 남겨두기만한다.

 

views.py에 있는 함수들을 쪼개서 각각만들어놨지만 동작은 문제없다.

urls.py로가면 path경로에 어떤 함수가 어느 폴더내에 어느파일에 있는 함수인지 써야하는데 

추적하는데 번거롭게 된다. 

 

init파일을 이제 지워버리자

 

urls.py로가서 views폴더에잇는 파일들을 import시켜준다.

 

 

urlpatterns에서 경로수정해주기

board-urls.py

path의 경로를 수정해주고 나중에 쉽게 건드릴 수 있도록 분류시켜준다

 

 

 

 

따라서 conifg폴더의 urls.py도 basic_views.py를 import시켜주고  path 경로수정을 해준다.

config- urls.py

 

웹으로가서 작동이 잘되는지 확인해준다.

 

 

 

728x90
반응형