11월, 2016의 게시물 표시

Django 1.10.3 Tutorial : 로그인/로그아웃 처리하기

명색이 관리자 화면인데, 아무나 들어와서 조작하면 안되겠지요? 이제는 마지막으로 로그인/로그아웃 처리를 해보겠습니다. 로그인/로그아웃은 세션을 이용해서 구현합니다. 로그인 화면을 구성합니다.  $PRJNAME/web/prjname/templates/mgmt/index.html  을 작성합니다. <!DOCTYPE html> < html lang = "ko" > < head > < meta charset = "utf-8" > < meta http-equiv = "X-UA-Compatible" content = "IE=edge" > < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < meta name = "_xsrf" content = "{{.xsrf_token}}" / > < title > Management < / title > < link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity = "sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin = "anonymous" > <!-

Django 1.10.3 Tutorial : 개인정보 양방향암호화(AES256) 하기

이 예제에는 개인정보 데이터가 없긴 하지만, 핸드폰(Mobile)을 개인정보라 간주하고 암호화를 진행해보겠습니다. $PRJNAME/web/prjname/models/crypto.py  파일을 생성한다. 여기에 암호화 함수가 들어갑니다. # -*- coding: utf-8 -*- # prjname/models/crypto.py   # 참고 : # http://third9.tistory.com/261 # http://blog.dokenzy.com/archives/1997   import base64 from Crypto. Cipher import AES   from django. conf import settings     class MyCrypto: def __init__ ( self ) : BLOCK_SIZE = 32 PADDING = '|' # The key argument should be the AES key, # either 16, 24, or 32 bytes to select AES-128, AES-192, or AES-256. # secret = "140b41b22a29beb4061bda66b6747e14" secret = settings. SECRET_KEY [ : 32 ] # AES-256 cipher = AES. new ( secret )   pad = lambda s: s + ( BLOCK_SIZE - len ( s. encode ( 'utf-8' ) ) % BLOCK_SIZE ) * PADDING   self . encodeAES = lambda s: base64 . b64encode ( cipher. encrypt ( pad ( s ) ) ) self . decodeAE

Django 1.10.3 Tutorial : 비밀번호 단방향암호화(SHA256) 하기

정보통신망법, 개인정보보호법 등에 의하면 비밀번호는 단방향암호화(SHA256 등), 개인정보는 양방향암호화(AES256 등)를 하도록 되어 있습니다. 지금까지 작성한 예제는 이런 법에 맞지 않아서 서비스할 수 없겠네요. 여기에서는 비밀번호의 단방향 암호화를 구현해보도록 하겠습니다. 먼저, 기존 DB에 들어있던 사용자 정보를 모두 삭제합시다. $ cd $PRJNAME / web $ sqlite db.sqlite3 SQLite version 3.7.9 2011 - 11 -01 00: 52 : 41 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite > select * from tb_admin; 1 | testid1 | passwd1 | nick1 | 010- 1111 - 1111 | 2016 - 11 - 16 | 2 | testid2 | passwd2 | nick2 | 010- 2222 - 2222 | 2016 - 11 - 16 | 3 | testid3 | passwd3 | nick3 | 010- 3333 - 3333 | 2016 - 11 - 16 | 4 | testid4 | passwd4 | nick4 | 010- 4444 - 4444 | 2016 - 11 - 16 | 5 | testid5 | passwd5 | nick5 | 010- 5555 - 5555 | 2016 - 11 - 16 | sqlite > delete from tb_admin; sqlite > select * from tb_admin; sqlite > .quit $PRJNAME/web/prjname/models/admin.py  에 다음을 추가합니다. ...   import hashlib   ...   def _get_password ( self ) : return

Django 1.10.3 Tutorial : 관리자 삭제하기

$PRJNAME/web/prjname/views/mgmt/admin.py  에 다음을 추가한다. ...   # 관리자 삭제 def delete ( request , id ) : AdminModel. objects . filter ( id = id ) . delete ( ) messages. add_message ( request , messages. INFO , '해당 관리자를 정상적으로 삭제하였습니다.' ) return redirect ( 'mgmt_admin_index' )   ... $PRJNAME/web/prjname/urls.py  에 다음을 추가하고, 관리자 삭제를 해봅니다. url ( r '^mgmt/admin/delete/(?P<id>[0-9]+)$' , mgmt_admin. delete , name = 'mgmt_admin_delete' ) , 여기까지 하면, 기본적인 CRUD 기능을 모두 작성할 수 있게 됩니다. *^^*

Django 1.10.3 Tutorial : 관리자 수정하기

$PRJNAME/web/prjname/templates/mgmt/admin/update_form.html  을 작성한다. < div class = "modal-header" > < button type = "button" class = "close" data-dismiss = "modal" aria- label = "Close" >< span aria-hidden = "true" > &times; < / span >< / button > < h4 class = "modal-title" > 관리자 수정 < / h4 > < / div > < div class = "modal-body" > < form name = "update_form" action = "/mgmt/admin/update" method = "post" > {% csrf_token %} < div class = "form-group" > < label > 아이디 < / label > {{ form.userid }} {{ form.id }} < / div > < div class = "form-group" > < label > 별명 < small > (필수) < / small >< / label > {{ form.nick }} < / div > < div class = "form-gr