LoginSignup
1
0

More than 1 year has passed since last update.

djangoのMiddleWareに頼らなく、自作でSessionのキーと値をブラウザに保存しましょう!

Last updated at Posted at 2021-09-06

Djangoは独自のsession処理機能が実装されていますが、自分なりのsessionを作ることももちろんできます。
例えば:
image.png
このように、好きな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のカスタマイズに過ぎないため、ご了承ください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0