django session, 分页,数据库学习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django session, 分页,数据库学习相关的知识,希望对你有一定的参考价值。

一、http请求周期
浏览器(socket客户端):
    2.socket.connect(ip,端口)
    3.socket.send("
    规则: http协议
        GET请求:
            "GET  /index.html?k1=1&k2=2  Http/1.1\r\nhost:www.xiaohuar.com\r\ncontent-type: application/json\r\n\r\n"
         
         
         请求头和请求体使用\r\n\r\n分割, 前面是请求头,后面是请求提
         
         
         POST请求:
         "POST  /index.html?k1=1&k2=2  Http/1.1\r\nhost:www.xiaohuar.com\r\ncontent-type: application/json\r\n\r\nusername=alex&pwd=123"
         
         请求头和请求体使用\r\n\r\n分割,前面是请求头,后面是请求体
         
         
    6.获取响应
        响应头,响应体 = data.split(‘\r\n\r\n‘)
        
    7.断开连接
    
    
    web端:
    1.服务端运行: ip,端口
    4.字符串 = server.recv()
        头,体 = data.split("\r\n\r\n")
        
    5.服务端响应.
        conn.send(‘......‘)
        响应头:
        响应体:
        
    7.断开连接
    
    总结:
    a.Http请求中本质都是字符串
    b.Http请求短链接(请求,响应断开连接)
    c.请求和响应都有: 头、体
        请求:
            请求头
            \r\n\r\n
            请求体
            
        响应:
            响应头
            \r\n\r\n
            响应体
            <html>
                ....
            </html>
            
            
            
二、django框架
    Django本质:
        socket(wsgiref)
        解析和封装http请求(*)
        
    视图函数:
    
        def index(request):
            request.GET
            request.body #获取原生的请求体
            request.POST #如果请求头中: content-type: urlencode-form...才将request.body转化成字典
                可能有值,可能没值
            request.method
            request.Meta
            
            request.GET.get()
            request.GET.getlist()
            request.POST.get()
            request.POST.getlist()
            
            
            return HttpResponse(‘字符串/字节‘)
            return render(request,"html路径", {})
            return redirect(‘URL‘)
三、cookie和session

cookie是客户端浏览器请求服务端登录时,服务端生成的一段键值对携带在响应头中,下
次客户端请求时,服务端会先验证cookie是否存在,存在则不需要重新登录,否则要从新登录

session是客户端登录服务端时,验证通过后会随机生成一段字符串作为key存放在django.session表中,
值是也是一个字典,是程序设定的一些用户信息,同时响应头会携带这个key返回给客户端,这样会更加
安全。

session认证登录退出流程:
def auth(func):
    def inner(request,*args,**kwargs):
        ck = request.session.get(‘uuuuuuuu‘)
        if not ck:
            return redirect(‘/login.html‘)
        return func(request, *args, **kwargs)
    return inner

@auth
def index(request):
    user = request.session.get(‘uuuuuuuu‘)
    return render(request,‘index.html‘,{‘user‘: user})

def login(request):
    if request.method == "GET":
        return render(request,‘login.html‘)
    else:
        user = request.POST.get(‘user‘)
        pwd = request.POST.get(‘pwd‘)
        pwd = encrypt(pwd)
        obj = models.userInfo.objects.filter(username=user,password=pwd).first()
        if obj:
            request.session[‘uuuuuuuu‘] = user #存放在django.session中这个用户key对应的字典值中
            request.session.set_expiry(5)
            return redirect(‘/index.html‘)
        else:
            return render(request,‘login.html‘,{‘msg‘:‘用户名或密码错误‘})
def logout(request):
    request.session.clear()
    return redirect(‘/login.html‘)
    
session有关配置(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 = False  # 是否关闭浏览器使得Session过期(默认)
# SESSION_SAVE_EVERY_REQUEST = True  # 是否每次请求都保存Session,默认修改之后才保存(默认)
四、csrf_token
    跨站请求伪造,post提交数据为避免其他网站通过用户session信息获取信息,
    需要使用{% csrf_token %},
    在ajax提交时,可以使用以下方式:
    $.ajax({
        url:"/icbc.html",
        type:"POST",
        data: {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘csrfmiddlewaretoken‘:"{{ csrf_token }}"},
        success:function(arg){
        console.log(arg)
        }
    })


本文出自 “linux技术” 博客,请务必保留此出处http://haoyonghui.blog.51cto.com/4278020/1962423

以上是关于django session, 分页,数据库学习的主要内容,如果未能解决你的问题,请参考以下文章

[Django学习]分页

Django之session与分页

Django - 学习目录

Python Day71 django分页及session介绍

Django基础---web框架 和 django 介绍3 --model --form---跨站请求---cookie--session--分页--缓存--信号

python学习点滴记录-Day20(分页cookie/sessionajax)