django에서 데코레이션이란 기능을 이용하면 view별로 공통 소스를 넣지 않아도 된다.
스프링의 어노테이션하고 비슷하다고 보면 된다.
로그인에서 사용하는 데코레이션 login_required 예제
from django.contrib.auth.decorators import login_required
@login_required(login_url='/accounts/login/')
def my_view(request):
...
사용자 정의해서 데코레이션 사용하기
urls.py
from revfactory import views url(r'index/$', views.index), url(r'index2/$', views.index2), ) |
views.py
두개 이상지정도 가능하다.
from django.http.response import HttpResponse, HttpResponseRedirect
def ipcheck(function=None):
def _dec(view_func):
def _view(request, *args, **kwargs):
ip = request.META.get("REMOTE_ADDR")
if ip != "127.0.0.1":
print "ok"
return HttpResponseRedirect('/index2')
else:
print "no"
return view_func(request, *args, **kwargs)
_view.__name__ = view_func.__name__
_view.__dict__ = view_func.__dict__
_view.__doc__ = view_func.__doc__
return _view
if function is None:
return _dec
else:
return _dec(function)
def ipcheck2(function=None):
def _dec(view_func):
def _view(request, *args, **kwargs):
ip = request.META.get("REMOTE_ADDR")
if ip == "127.0.0.1":
print "ok1"
return HttpResponseRedirect('/index2')
else:
print "no2"
return view_func(request, *args, **kwargs)
_view.__name__ = view_func.__name__
_view.__dict__ = view_func.__dict__
_view.__doc__ = view_func.__doc__
return _view
if function is None:
return _dec
else:
return _dec(function)
@ipcheck
@ipcheck2
def index(request):
return HttpResponse('welcome')
def index2(request):
return HttpResponse('bye')
index접속시
[06/Mar/2014 02:49:03] "GET /index2/ HTTP/1.1" 200 3
no
ok1
'백엔드기술 > 개발언어' 카테고리의 다른 글
Django 에서 복합키 업데이트시 주의사항 (0) | 2014.03.12 |
---|---|
파이썬 imageField (0) | 2014.02.27 |
파이썬 한글 인코딩 설정 (0) | 2014.02.26 |