Cách sử dụng phiên trong mẫu Django
Như đã thảo luận trước đó, chúng tôi có thể sử dụng cookie phía máy khách để lưu trữ nhiều dữ liệu hữu ích cho ứng dụng web. Chúng tôi đã thấy trước đây rằng chúng tôi có thể sử dụng cookie phía máy khách để lưu trữ nhiều dữ liệu hữu ích cho ứng dụng web của chúng tôi. Điều này dẫn đến rất nhiều lỗ hổng bảo mật tùy thuộc vào mức độ quan trọng của dữ liệu bạn muốn lưu Show Vì lý do bảo mật, Django có khung phiên để xử lý cookie. Các phiên được sử dụng để tóm tắt việc nhận và gửi cookie, dữ liệu được lưu ở phía máy chủ (như trong cơ sở dữ liệu) và cookie phía máy khách chỉ có ID phiên để nhận dạng. Các phiên cũng hữu ích để tránh trường hợp trình duyệt người dùng được đặt thành 'không chấp nhận' cookie Thiết lập phiênTrong Django, việc bật phiên được thực hiện trong cài đặt dự án của bạn. py, bằng cách thêm một số dòng vào tùy chọn MIDDLEWARE_CLASSES và INSTALLED_APPS. Điều này nên được thực hiện trong khi tạo dự án, nhưng bạn nên biết rằng MIDDLEWARE_CLASSES nên có - 'django.contrib.sessions.middleware.SessionMiddleware' Và INSTALLED_APPS nên có - 'django.contrib.sessions' Theo mặc định, Django lưu thông tin phiên trong cơ sở dữ liệu (bảng Django_session hoặc bộ sưu tập), nhưng bạn có thể định cấu hình công cụ để lưu trữ thông tin bằng các cách khác như. trong tệp hoặc trong bộ đệm Khi phiên được bật, mọi yêu cầu (đối số đầu tiên của bất kỳ chế độ xem nào trong Django) đều có thuộc tính phiên (dict) Hãy tạo một ví dụ đơn giản để xem cách tạo và lưu phiên. Chúng tôi đã xây dựng một hệ thống đăng nhập đơn giản trước đây (xem chương xử lý biểu mẫu Django và chương Xử lý cookie Django). Hãy để chúng tôi lưu tên người dùng vào cookie để nếu chưa đăng xuất, khi truy cập trang đăng nhập của chúng tôi, bạn sẽ không thấy biểu mẫu đăng nhập. Về cơ bản, hãy làm cho hệ thống đăng nhập mà chúng ta đã sử dụng trong Django Cookies xử lý an toàn hơn, bằng cách lưu phía máy chủ cookie Đối với điều này, trước tiên hãy thay đổi chế độ xem đăng nhập của chúng tôi để lưu tên người dùng của bạn phía máy chủ cookie - def login(request): username = 'not logged in' if request.method == 'POST': MyLoginForm = LoginForm(request.POST) if MyLoginForm.is_valid(): username = MyLoginForm.cleaned_data['username'] request.session['username'] = username else: MyLoginForm = LoginForm() return render(request, 'loggedin.html', {"username" : username} Sau đó, hãy để chúng tôi tạo chế độ xem formView cho biểu mẫu đăng nhập, nơi chúng tôi sẽ không hiển thị biểu mẫu nếu cookie được đặt - def formView(request): if request.session.has_key('username'): username = request.session['username'] return render(request, 'loggedin.html', {"username" : username}) else: return render(request, 'login.html', {}) Bây giờ chúng ta hãy thay đổi url. py để thay đổi url sao cho nó ghép nối với chế độ xem mới của chúng ta - from django.conf.urls import patterns, url from django.views.generic import TemplateView urlpatterns = patterns('myapp.views', url(r'^connection/','formView', name = 'loginform'), url(r'^login/', 'login', name = 'login')) Khi truy cập /myapp/connection, bạn sẽ thấy trang sau – Và bạn sẽ được chuyển hướng đến trang sau - Bây giờ nếu bạn cố truy cập lại /myapp/connection, bạn sẽ được chuyển hướng trực tiếp đến màn hình thứ hai Hãy tạo một chế độ xem đăng xuất đơn giản để xóa cookie của chúng tôi def logout(request): try: del request.session['username'] except: pass return HttpResponse("You are logged out.") Và ghép nó với một URL đăng xuất trong myapp/url. py url(r'^logout/', 'logout', name = 'logout'), Bây giờ, nếu bạn truy cập /myapp/logout, bạn sẽ nhận được trang sau - Nếu bạn truy cập lại /myapp/connection, bạn sẽ nhận được form đăng nhập (màn hình 1) Một số hành động có thể khác bằng cách sử dụng phiênChúng ta đã biết cách lưu trữ và truy cập phiên, nhưng thật tốt khi biết rằng thuộc tính phiên của yêu cầu có một số hành động hữu ích khác như -
|