django - session初步

最近遇到一個比較令我這菜的不再菜頭疼的問題:

點擊 url A (url A中包含參數P), 跳轉到 url B, 要求跳轉到url B的同時傳遞參數P,但參數P不能出現在url上。

就這個問題試來試去:

redirect, HttpResponseRedirect, reverse

發現以上均不行, 後來詢問某大牛,才知道有session這麼東東(原諒我太菜吐舌頭)

下面簡要小結一下 session的用法,順便將上面那個問題記錄下。

環境:

python: 2.7  djnao: 1.8.3

django session簡介:

session框架讓你存儲和獲取訪問者的數據信息,這些信息保存在服務器上(默認是數據庫中),以 cookies 的方式發送和獲取一個包含 session ID的值,並不是用cookies傳遞數據本身。

session所用的數據庫爲: django_session, 定義如下:



配置session


settings.py
INSTALLED_APPS = (
    'django.contrib.sessions',
)
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
)
SESSION_COOKIE_AGE=1209600  # (單位s)默認2周</span>

操作session

# 創建或修改 session:
request.session[key] = value
# 獲取 session:
request.session.get(key,default=None)
# 刪除 session
del request.session[key] # 不存在時報錯

問題:

點擊 url A (url A中包含參數P), 跳轉到 url B, 要求跳轉到url B的同時傳遞參數P,但參數P不能出現在url上; 同時在url B的html模板中改送一個ajax post 請求, 請求url C, 而在url C的視圖函數中要得到這個參數P


解決辦法:

url A ---P---> url B |

          url C <---P---|

views.py>
def view_A(request, param_P):
    request.session['param'] = param_P   
    return HttpResponseRedirect(reverse('blog.views.view_B'))   
def view_B(request):
    param=  request.session.get('param')
    return render(request, 'index.html')
def view_C(request):
    param=  request.session.get('param')
    return HttpResponse(json.dumps({"status": "1"}), content_type="application/json")

urls.py
from django.conf.urls import include, url
from blog.views import *
urlpatterns = [
    url(r'^/views_A/?P<P>\w+/$', view_A),    
    url(r'^/views_B/$', view_B),
     url(r'^/views_C/$', view_C),
]


index.html中提交, url C, 但 url C 中不包含參數P, 這時, session中已經有參數P所以不必顯示提供參數P

流程:

(1)

http://localhost:8000/view_A/param_P

-->

(2)

http://localhost:8000/view_B

(3)

(模板: index.html)

.ajax({

//...

url: "/view_C/",

//...

});

(4)

在view_C中可以能通過session取出參數P


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章