CS Activity/Likelion 11th

[멋쟁이사자처럼 11기] 과제 3: 블로그 기능 추가

Jenn28 2023. 4. 5. 18:45

< 검색 기능 추가 >

 

1. 검색창 만들기

 

home.html

 

<input type=“search”>는 검색어를 입력할 수 있는 텍스트 필드를 정의합니다.

 

검색 필드는 텍스트 필드와 기능적으로는 완전히 똑같지만, 브라우저에 의해 다르게 표현될 수 있습니다.

 

검색 필드에는 반드시 name 속성을 설정해야 하며, name 속성이 설정되어 있지 않으면 서버로 제출되지 않을 것입니다.

 


 

aria-label은 우리 눈에 보이지 않더라도 브라우저에게는 전달이 되면 좋은 정보, 혹은 스크린 리더를 통해 웹을 사용하는 사용자들에게 전달해야 하는 정보를 제공하고 싶을 때 사용합니다.

 


 

장고에서 POST 메서드를 사용할 땐, 해킹 방지를 위해 반드시 csrf_token를 사용해야 합니다.

 


 

2. url 추가

 

urls.py: 검색창의 주소를 어떻게 띄울건지 작성

 

search라는 이름으로 views 파일의 search 함수로 넘어갑니다.

 


3. 검색 기능 구현 (함수 생성)

 

views.py

 

POST 요청은 BODY에 정보를 담아 요청하기 때문에 URL에서는 별도의 작업이 필요하지 않으며, 해당 Views가 호출될 수 있도록만 설정되어 있으면 요청을 처리할 수 있습니다.

 

GET과 POST의 공통점은 서버에 Request 요청을 하는 메소드라는 점입니다.

-> 홈페이지에 로그인 등의 작업을 처리할때 사용자(클라이언트)가 폼을 작성후 요청(Request)하는 동작을 의미합니다.

 

GET과 POST와의 차이점은 클라이언트의 요청이 URL 뒤에 추가되어서 요청되는 점입니다.

 

GET 방식(가져온다)의 특징으로는 POST보다 전송속도가 빠릅니다.

왜냐하면, GET 방식은 한번 접근 후, 또 요청 시 빠르게 접근하기 위해 데이터를 저장시켜 놓기때문입니다.

-> ex) www.xxx.com?id=aaa&bbb=111과 같이 작성합니다.

-> 도메인 뒤에 ?가 붙여지며 ? 뒤는 데이터가 들어온다는 것을 의미합니다.

-> URL 형태로 출력되기 때문에 특정 페이지를 타인이 접속 가능하며, URL의 길이가 한정되어있기 때문에 보내는 양의 한계가 존재합니다.

 

반면, POST 방식(수행한다)은 URL이 아닌 BODY에 데이터를 넣어서 숨겨진 상태로 전송해주는 방식입니다.

보통 HTML에서 form 형태를 이용하여 submit을 사용합니다.

 


 

render() 함수는 request 객체를 첫번째 인수로 받고, template 이름을 두번째 인수로 받으며, context 사전형 객체를 세번째 선택적(optional) 인수로 받습니다.

 

context로 원하는 인자를, 즉 views에서 사용하던 파이썬 변수를 html 템플릿으로 넘길 수 있습니다. 딕셔너리형으로 사용하며 key 값이 templates에서 사용할 변수 이름, value 값이 변수가 됩니다.

 


 

views.py

 

첫번째줄:

입력한 searched 값을 request로 받아와서 searched에 저장합니다.

 

두번째줄:

Blog에 있는 모든 objects를 가져와서 filter 합니다. -> 어떤 기준으로? (title__contains = 입력한 searched 값)

filter한 것을 searched_blogs에 저장합니다.

 

세번째줄:

searched.html을 rendering 합니다.  -> 어떤 모습, context로? searched.html에서 사용할 {'변수 이름':변수}로

 


 

4. 검색 결과 페이지 추가

 

searched.html

 

{% extends "home.html" %} 해줘서 검색창을 계속 띄웁니다.

 

Q. block contents 해야하는 이유는?

 


 

< 댓글, 스크랩, 신고 기능 추가 >

 

https://0ver-grow.tistory.com/963

 

[장고 실전3] 3. 커뮤니티 : 댓글기능 구현

1. models.py : Comment 객체 정의 # 댓글 class Comment(models.Model) : comment = models.TextField() date = models.DateTimeField(auto_now_add=True) # Post를 참조(foreign)함 # 댓글달린 게시글이 삭제되면 참조객체도 삭제 post = mode

0ver-grow.tistory.com

 

1. 댓글 클래스 구현

 

models.py

 

models.py 변경 시 migrations 해줘야 합니다.

 


 

2. 댓글 폼 추가

 

forms.py

 


 

3. 댓글 기능 구현

 

views.py

 

CommentForm() 불러와줍니다.

 


 

views.py

 

댓글 추가 기능 구현해줍니다.

 


 

4. url 추가

 

urls.py

 


 

5. admin에 댓글 게시판 추가

 

admin.py

 


 

< 회원가입 기능 추가 >

 

https://0ver-grow.tistory.com/972

 

[장고 실전3] 7. 커뮤니티 : 회원가입

accounts 앱 > login.html 프로젝트 > urls.py accounts 앱 > views.py가입 기능 함수 메인앱 > 템플릿 > registe.html 다음 화면을 표시한 것처럼 수정하자 메인앱 > register.html사용자의 입력값을 받는 방식은 3가지

0ver-grow.tistory.com

 


 

< 로그인, 로그아웃 기능 추가 >

 

https://0ver-grow.tistory.com/968

 

[장고 실전3] 4. 커뮤니티 : 로그인, 로그아웃

로그인/로그아웃계정관리 위한 앱 설치$ python manage.py startapp accounts 로그인 기능 추가하기 ※ POST 방식은 {% csrf_token %} 보안 설정이 무조건 되어있어야 한다. from django.shortcuts import render, redirect from

0ver-grow.tistory.com