Messages Framework 1회성 메세지를 담는 용도HttpRequest 인스턴스를 통해 메세지를 남길 수 있음. # 세션에 저장됨 세션=>DB 세션을 저장하기위해 httprequest가 필요함메세지는 1회 노출이 되고, 사라집니다. 새로고침하면 보여지지 않음.ex) "저장되었습니다.", "로그인되었습니다." Message Levels를 통한 메세지 분류파이썬 로깅 모듈과 유사. 레벨 별로 필터링이 가능하며, 템플릿에서 다른스타일로 노출이 가능• DEBUG : 디폴트 설정 상으로 메세지를 남겨도 무시• INFO• SUCCESS• WARNING• ERROR 메세지 등록 코드해당 뷰 요청을 한 유저에게만 노출할 메세지를 다수 등록유저 별로 메세지가 따로 등록# blog/views.pyfrom djan..
#dojo/models.pyfrom django.db import models class Post(models.Model):title = models.CharField(max_length=100)content = models.TextField() user_agent = models.CharField(max_length=200) #추가 # dojo/forms.pyfrom django import formsfrom .models import Post class PostForm(forms.ModelForm):class Meta:model = Postfields = ['title', 'content']widgets = {# JavaScript로 브라우저 UserAgent정보를 담을 것이기에, 구지 UI에 노출할..
ModelForm (Form Class를 상속)- Django Form Base- 지정된 Model로부터 필드정보를 읽어들여, form fields 를 세팅변경 전def min_length_3_validator(value): if len(value) < 3: raise forms.ValidationError('3글자 이상 입력해주세요.') class PostForm(forms.Form):title = forms.CharField()content = forms.CharField(widget=form.Textarea) # ModelForm.save 인터페이스를 흉내내어 구현def save(self, commit=True):post = Post(**self.cleaned_data)if commit:post.s..
Form- 장고를 더욱 장고스럽게 만들어주는 주옥같은 Feature- Model클래스와 유사하게 Form클래스를 정의- 주요 역할 : 커스텀 Form클래스를 통해 ...- 입력폼 HTML 생성 : .as_table(), .as_p(), .as_ul() 기본제공- 입력폼 값 검증(validation) 및 값 변환- 검증을 통과한 값들을 사전타입으로 제공 (cleaned_data) def post_new(request): if request.method == 'POST': form = PostForm(request.POST, request.FILES) if form.is_valid(): post = Post(**self.cleaned_data) post.save() return redirect(post) e..
HttpRequest• 클라이언트부터의 모든 요청 내용을 담고 있으며, 매 요청 시마다 뷰 함 수의 첫번째 인자로 전달 (중요) 모든 뷰함수는 첫번째 인자로 request를 받는다 FBV, CBV=self.reqyestHttpRequest objects 에서 폼 처리 관련 속성들- request.method : 요청의 종류, 무조건 "GET" 또는 "POST" (참고) 무조건 대문자!!- request.GET : GET인자, QueryDict 타입 (GET요청/POST요청 시)- request.POST : POST인자, QueryDict 타입 (POST요청 시)- request.FILES : POST업로드 파일 인자, MultiValueDict 타입 MultiValueDict 'Simon'd.getlis..
Cross-site request forgery사이트 간 요청 위조 공격• 사용자가 의도하지 않게 게시판에 글을 작성하거나, 쇼핑을 하게 하는등의 공격 A라는 싸이트 방문 시 아래와 같은 코드가 있다고 가정 한다. # java스크립트 코드 CSRF를 막기 위해 POST요청에 한해, csrf token 발급 및 체크 POST요청에 한해 CsrfViewMiddleware를 통해 csrf token을 체크 # middleware 란? view가 호출 되기 직전에 추가로 호출되는 함수 목록(설명) ##토큰 값은 계속 바뀐다.1. GET으로 유저에게 FORM형태를 제공한다.2. 인자를 유저가 입력 하고, 마지막 단계에 Token을 발급 한다.3. 전 항목을 전부 POST로 전송한다.4. CSRF는 POST의 토큰..
HTML Form # 입력 서식웹페이지에서는 form 태그를 통해, 데이터를 전송 ex) 로그인 폼, 댓글 폼 # user의 id와 pwd를 입력하여 서버로 전송하나의 form 태그는 하나 이상의 위젯 (Widget) 을 가진다. # 위젯 : 하나의 웹 UI # action은 유저한테 입력 받은 값들을 어느 서버로 보낼것인가 주소는 url : 1줄 문자열 입력 : 1줄 이상의 문자열 입력 : 항목 중 택일 : 체크박스 (한 그룹 내 여러 항목을 다수 선택 가능) : 라디오박스 (한 그룹 내 여러 항목 중에 하나만 선택 가능) 그 외 다수 위젯 HTML Form 태그 필수 속성• action : 요청을 보낼 주소• method # 어떤 방식으로 보낼 것인가• "GET" : 주로 데이터 조회 요청 시 • "..
Django Template Filter- 템플릿 변수값 변환을 위한 함수이며, 다수 필터 함수를 연결 가능- {{ var|filter1 }}, {{ var|filter2:인자 }}, {{ var|filter3:인자|filter4 }} # | (파이프)를 통해 연결 파이프 앞에 있는 인자가 filter2의 첫번째 인자, :(콜론) 뒤에 인자가 두번째 인자 로 지정 {{ var|filter3:인자|filter4 }}의 경우 앞서 결친 인자가 filter4 로 지정됨.- 빌트인 Filter가 지원되며, 장고앱 별로 커스텀 Filter 추가 가능 - date, time, timesince, timeuntil, default, default_if_none,join, length, linebreaks, lineb..
Fat ModelStupid Template : Thin View Template Engines 몇 가지Django Template Engine : Django 기본 지원 템플릿 엔진• Jinja2 : 써드파티 엔진이었으나, 최근에 최소한의 지원이 내장됨.• Django Template Engine과 문법이 유사• 장고 프로젝트에 쓸려면 django-jinja 추천• Mako, HamlPy장고 프로젝트에서 다른 템플릿 엔진을 쓸 수도 있으나, 가급적이면 기본 장고 템플릿 엔진에 먼저 익숙해지기를 권장 Django Template Engine Syntax{% extends "base.html" %} # extends = tag / "base.html" = 인자 (중요) 탬플릿 태그에서는 인자로 넘기는 ( ..
Django URL Dispatcherurls.py 변경만으로 "각 뷰에 대한 URL"이 변경되는, 유연한 URL 시스템 urlpatterns = [url(r'^blog/$', blog_views.post_list, name='post_list'),url(r'^blog/(?P\d+)/$', blog_views.post_detail, name='post_detail'),]# "/blog/", "/blog/1/" 주소로 서비스하다가, 아래와 같이 변경하면 urlpatterns = [url(r'^weblog/$', blog_views.post_list, name='post_list'),url(r'^weblog/(?P\d+)/$', blog_views.post_detail, name='post_detail'),..