python16_day17【Django_session、ajax】

一、Session

  1.settings.py 

SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)
    
    SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
    SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)
    SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
    SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认)
    SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认)
    SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = True                  # 是否关闭浏览器使得Session过期(默认)
    SESSION_SAVE_EVERY_REQUEST = True                       # 是否每次请求都保存Session,默认修改之后才保存(默认)
 

  2.views.py

 1 def home(request):
 2     # v = request.COOKIES.get('uuu')
 3     v = request.session.get('user')
 4     if v:
 5         return HttpResponse("登录成功: [%s]" % v)
 6     else:
 7         return redirect('/login/')
 8 
 9 
10 def login(request):
11     if request.method == 'GET':
12         return render(request, 'login.html', {'msg': ''})
13     else:
14         u = request.POST.get('user')
15         p = request.POST.get('pwd')
16         ct = UserInfo.objects.filter(username=u, password=p).count()
17         if ct:
18             obj = redirect('/home/')
19             # 方法一写cookie
20             # obj.set_cookie('uuu', u, 30)
21             # 方法二写session
22             # 生成随机字符串
23             # 发送给客户端
24             # 保存服务器
25             request.session['user'] = u
26             request.session['pass'] = p
27             return obj
28         else:
29             return render(request, 'login.html', {'msg': "用户名或者密码错误!"})

  3.session其它方法

 def index(request):
        # 获取、设置、删除Session中数据
        request.session['k1']
        request.session.get('k1',None)
        request.session['k1'] = 123
        request.session.setdefault('k1',123) # 存在则不设置
        del request.session['k1']
 
        # 所有 键、值、键值对
        request.session.keys()
        request.session.values()
        request.session.items()
        request.session.iterkeys()
        request.session.itervalues()
        request.session.iteritems()

# 用户session的随机字符串
        request.session.session_key
 
        # 将所有Session失效日期小于当前日期的数据删除
        request.session.clear_expired()
 
        # 检查 用户session的随机字符串 在数据库中是否
        request.session.exists("session_key")
 
        # 删除当前用户的所有Session数据
        request.session.delete("session_key")
 
        request.session.set_expiry(value)
            * 如果value是个整数,session会在些秒数后失效。
            * 如果value是个datatime或timedelta,session就会在这个时间后失效。
            * 如果value是0,用户关闭浏览器session就会失效。
            * 如果value是None,session会依赖全局session失效策略。

 二、ajax

  1.页面login.html

 1 <body>
 2     <div id="block">
 3         <label id="user" for="name">p</label>
 4             <input type="text" name="username" id="name" placeholder="Username" required/>
 5         <label id="pass" for="password">k</label>
 6             <input type="password" name="password" id="password" placeholder="Password" required />
 7             <input type="button" id="submit" name="submit" value="login"/>
 8     </div>
 9 
10     <script src="/static/jquery-1.12.4.js"></script>
11  <script>
12         $(function(){
13                 bind_button();
14         })
15 
16         function bind_button(){
17             $("#submit").click(function(){
18                 var u = $("#name").val();
19                 var p = $("#password").val();
20                 $.ajax({
21                     url: "{% url 'LOGIN' %}",
22                     type: "POST",
23                     data: {user:u, passwd:p},
24                     dataType: "JSON",
25                     success: function(data){
26                         if(data.status){
27                             location.href = "/host/"
28                         }else{
29                             alert(data.error)
30                         }
31                     }
32                 })
33             })
34         }
35     </script>
36 </body>

  2.views.py

import json

def login(request):
    if request.method == 'POST':
        user = request.POST.get('user')
        passwd = request.POST.get('passwd')
        obj = Users.objects.filter(username=user, password=passwd).first()
        res = {'status': True, 'error': None}
        if obj:
            request.session['user'] = user
            request.session['passwd'] = passwd
            return HttpResponse(json.dumps(res))
        else:
            res['status'] = False
            res['error'] = "用户名或者密码错误"
            return HttpResponse(json.dumps(res))

    elif request.method == 'GET':
        return render(request, 'login1.html', locals())

  3.AJAX序列化二种方式

  关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式。

  A.serializers

from django.core import serializers
ret = models.BookType.objects.all()
data = serializers.serialize("json", ret)

  B.json

import json

res = {'status': True, 'error': None}
return HttpResponse(json.dumps(res))

  

原文地址:https://www.cnblogs.com/weibiao/p/6886352.html