Djangoは独自のsession処理機能が実装されていますが、自分なりのsessionを作ることももちろんできます。
例えば:
このように、好きなNameを設定し、あるいはいくつのcookiesをまとめてブラウザに保存することで、ブラウザから二回目のrequestが来た時、必要なデータも簡単に手に入れることができます。
Template
簡便のため、form tagを使ってLogin画面を想像してください。
MiddleWare
class Cust_session(MiddlewareMixin):
def process_request(self, request):
request.my_session = {'my_session_id':'', 'my_session_value':''}
request.name = ''
def process_response(self, request, response):
my_session_value = request.my_session.get('my_session_value')
print(my_session_value)
hl = hashlib.md5()
hl.update(request.name.encode('utf-8'))
re_username = hl.hexdigest()
request.my_session['my_session_id'] = re_username
print(request.my_session)
response.set_cookie('my_session_id_plus',request.my_session['my_session_id'])
return response
Views層
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user_obj = True if username == 'A' and 'password' == 123 else False
if user_obj:
request.my_session['my_session_value'] = {'name':username,
'password':password}
request.name = username
return HttpResponse('ok')
return render(request, 'login.html', locals())
process_requestで設定されたrequest.my_sessionはViewsに渡し、Viewsのlogin関数はrequest.my_sessionのmy_session_value
の値を与える。
process_responseはViewsからのrequest.my_sessionをチェックし、my_session_idがないため、Viewsから与えられたrequest.nameを暗号化し、ブラウザで保存するmy_session_id_plusのvalueとなります。
単純にブラウザで保存されているcookiesのカスタマイズに過ぎないため、ご了承ください。