django - session初步

来源:互联网 发布:mac磁盘空间不足 编辑:程序博客网 时间:2024/05/18 00:38

最近遇到一个比较令我这菜的不再菜头疼的问题:

点击 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.pyINSTALLED_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.pyfrom django.conf.urls import include, urlfrom 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


0 0
原创粉丝点击