最近遇到一個比較令我這菜的不再菜頭疼的問題:
點擊 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),
]
流程:
(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