전체 글 CS & ITS 2022. 1. 3. [Network/Topic] Log4Shell/Log4J 보안 취약 이슈 Log4Shell Log4Shell은 이번 Log4J 이슈를 지칭합니다. 2021년 12월 9일 알리바바 클라우드 보안 팀(Alibaba Cloud Securiy Team)에 의해서 처음 보고되었으며, 이미 12월 1일부터 exploit되고 있었다고 추정하고 있습니다. Log4Shell은 RCE(Remote Code Execution) exploit 중 하나로 원격 코드 수행에 의한 취약점 공격을 받을 수 있습니다. 일반적으로 서버 시스템은 신뢰 할 수 있는 사용자(또는 컴퓨터)에게만 리소스 접근을 허용하므로, RCE 보안 이슈가 있는 시스템은 가장 높은 수준의 위험을 지닌 것으로 판단합니다. RCE 0-day exploit 0-day(Zero-day) exploit은 exploit 주체들이 보안/시스템.. Pyhon/Django 2022. 1. 2. [Pyhon/Django] 장고 기초#017. 장고 계정 권한 계정 권한 일반적으로 보안 또는 계정 권한에 따라서 웹 사이트에서 표시되는 html 엘리먼트를 다르게 처리합니다. 지금까지는 포스트를 누구나 생성 할 수 있었지만, 이번 문서에서는 웹 사이트에 로그인 중인 유저만 이 기능을 사용 할 수 있도록 수정합니다. blog/base.html에서 다음 코드를 수정합니다. {% if user.is_authenticated %} {% endif %} 포스트를 새로 생성하는 버튼을 장고 태그로 감싸고 있습니다. 태그에서는 사용자가 로그인 중인지 검사(is_authenticated)하고 버튼을 표시합니다. user는 장고 템플릿에서는 개발자가 따로 전달하지 않더라도 접근 할 수 있고, 사용자 계정의 정보를 포함합니다. 마찬가지로 포스트를 수정하는 버튼 역시 계정 로그인 여.. Pyhon/Django 2022. 1. 2. [Pyhon/Django] 장고 기초#016. 장고 폼 수정(Edit)하기 장고 폼 수정하기 지금까지 작업 내용으로는 포스트 타이틀을 클릭하면 post_detail.html에서 해당 포스트에 대한 상세 정보를 확인 할 수 있습니다. 이번에는 post_detail.html에서 포스트 내용을 수정하고, 이를 제출하는 작업을 진행 해보겠습니다. 포스트 내용을 수정하는 버튼을 생성하기 위해서 다음 코드를 추가합니다. post_detail.html의 최종 시안은 다음과 같습니다. 태그를 추가하여 버튼을 생성하였고, 링크는 장고 템플릿 태그를 사용하여 post_edit 뷰에 연결하도록 하였습니다. 파라미터로 전달되는 pk는 post_detail.html에서 제공되고 있던 포스트의 pk입니다. {% extends 'blog/base.html' %} {% block content %} {% .. Pyhon/Django 2022. 1. 2. [Pyhon/Django] 장고 기초#015. 장고 폼 저장(Submit)하기 장고 폼 이전 문서에서는 장고 폼(ModelForm)을 사용하여 아래와 같은 html 문서를 작성하였습니다. 이번 문서에서는 실제 비즈니스 로직을 추가하여 폼을 저장 해보겠습니다. 장고 폼 저장(Submit)하기 blog/views.py 파일을 열어 아래 코드를 확인합니다. 이전 문서에서 작성한 post_new 뷰는 (+)링크를 클릭했을 때 호출되지만, 폼을 제출(post_edit.html의 button type="submit")할 때도 호출됩니다. from django.shortcuts import render, get_object_or_404 from django.utils import timezone from .models import Post from .forms import PostForm de.. Pyhon/Django 2022. 1. 2. [Pyhon/Django] 장고 기초#014. 장고 폼(ModelForm) 장고 폼(ModelForm) 지금까지는 Post 모델에 대해서 데이터를 읽고, 뷰를 통해 렌더링하는 작업을 진행했습니다. 장고에서 제공하는 폼 기능을 사용하면 모델의 객체를 생성하고, 수정하는 일을 쉽게 처리 할 수 있습니다. 가장 먼저 블로그 애플리케이션 디렉토리에 forms.py 파일을 생성합니다. 지금까지의 디렉토리 트리는 다음과 같습니다. blog migrations ... static css ... templates blog ... forms.py models.py ... forms.py에는 다음 내용을 입력합니다. 우선 장고에서 제공하는 forms 모듈을 import하고, Post 모델에 대해서 폼을 제공하기 위해 Post 모듈 역시 import 합니다. from django import fo.. Pyhon/Django 2022. 1. 2. [Pyhon/Django] 장고 기초#013. 장고 애플리케이션 확장 포스트에 템플릿 링크 추가 이번에는 애플리케이션의 기능을 확장합니다. 포스트의 제목(Title)을 클릭하면 포스트의 세부 정보를 제공하는 기능을 추가합니다. 우선 post_list.html 문서를 다음과 같이 수정합니다. {% extends 'blog/base.html' %} {% block content %} {% for post in posts %} {{ post.published_date }} {{ post.title }} {{ post.text|linebreaksbr }} {% endfor %} {% endblock %} h1 태그 내부의 a 태그에서 href 어트리뷰트가 변경되었습니다. 장고의 템플릿 태그를 사용하여 클릭 시 이동 url을 제공하고 있습니다. 템플릿 태그에서 가리키는 post_d.. Pyhon/Django 2022. 1. 2. [Pyhon/Django] 장고 기초#012. 장고 템플릿 확장(Template extending) 템플릿 확장하기(Template extending) 이전 문서에서 post_list.html과 blog.css 파일을 수정하였습니다. 이번 문서를 따라가면 post_list.html을 한 단계 더 폴리싱 할 수 있습니다. 이번에는 장고의 템플릿 코드 {% block content %}를 활용하여 하나의 html 문서 내용을 다른 문서에서 공유하여 사용할 수 있도록 합니다. 이렇게 작업했을 때의 장점은 공통의 포멧을 지니는 html 코드 하나를 관리함으로써 유지/보수 단계에서 유리하다는 점입니다(그렇지 않은 경우 중복되는 html 코드를 수정하기 위해서 이를 포함하는 모든 html 문서를 따로 수정해야 합니다). 우선 post_list.html과 같은 디렉토리에 base.html을 생성합니다. base.h.. Pyhon/Django 2022. 1. 2. [Pyhon/Django] 장고 기초#011. 장고 CSS(Cascading Style Sheets) CSS(Cascading Style Sheets) css는 마크업 언어(HTML과 같은)에서 웹 브라우저에 출력되는 html 파일의 외관을 꾸미는 역할을 합니다. 장고의 CSS는 기존 CSS와 차이점이 없지만, 다음 문서 진행을 위해서 CSS 작업을 선행해야 합니다. 이 문서에서도 CSS에 대한 내용을 다루지는 않고, 참고 튜토리얼을 단순히 따라서 진행하겠습니다. 이 문서에서는 장고 프로젝트에서 정적 파일을 로드하는 방식만 이해하면 충분하기 때문입니다. 튜토리얼에서는 부트스트랩(http://bootstrapk.com/) 프레임워크 3.2.0 버전을 사용합니다. post_list.html 파일에서 다음 head 태그 이하를 추가합니다. 다음으로 정적 파일(CSS)을 관리하기 위해서 static 디렉토리를 .. Pyhon/Django 2022. 1. 2. [Pyhon/Django] 장고 기초#010. 장고 쿼리셋과 템플릿을 이용한 동적 HTML 문서 작성 동적 데이터를 컨텍스트에 전달 views.py에서 post_list에 대한 뷰를 다시 정의합니다. 이전 문서에서 인터렉티브 콘솔에서 다뤘던 쿼리셋을 파이썬 장고 소스 코드에서도 사용 할 수 있습니다. from django.shortcuts import render from django.utils import timezone from .models import Post def post_list(request): posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') return render(request, 'blog/post_list.html', { 'posts': posts }) objects.fi.. 이전 1 ··· 30 31 32 33 34 다음