HttpResponse和HttpResquest

2018-09-29  本文已影响0人  fly5

一、HttpRequest对象

服务器接受到客户请求后,系统自动创建的对象(视图函数第一个参数)
    path    请求路径
    method  请求方法
    GET     get请求参数
    POST    post请求参数
    FILES   上传文件
    COOKIES     cookie对象【会话技术】
    SESSION     session对象【会话技术】
    name = request.GET.get("name")
    name = request.POST.get('name'),

二、HttpResponse对象

    用于返回数据给客户端的,
    response = HttpResponse("hello")
    response = HttpResponse("hello", status=200)
    response = render(request, "index.html")
    response = render(request, "index.html", status=301)
    response = redirect("/meituan/")
    response = JsonResponse(stu)

三、会话技术

    HTTP 无状态 [请求一次,返回对应响应,称为一次会话]
    会话技术: 实现状态保持
    为什么要使用会话保持?
        在一定时间段或操作中,跟踪请求者状态【服务器就知道你是谁】

类比:github HTTP每次操作都需要输入用户和密码【服务器才知道你是谁】

    cookie:客户端会话技术
    session:服务器会话技术(要依托cookie)
    token:手动sesslon

    - 创建响应 response = HttpResponse()
    - 设置cookie response.set_cookie(key,value)
    - 获取cookie request.COOKIE.get(key, defaultvalue=None)
    - 删除cookie response.delete_cookie(key)
    - 设置过期时间
      max_age=0 # 默认(浏览器关闭失效)
      max_age=None  # 永不失效
      max_age=num   # num秒后失效
      expires=timedelta(days=1) # 一天后过期
    # 如果要使用session会话技术,需要在settings.py中设置
    # MIDDELEWARE 添加 (默认已添加) 
    - 设置session
        request.session[key] = value
    - 获取session
        request.session.get(key)
    - 删除session
        # 方式一: sessionid标识存储在cookie
            response = redirect("/meituan/")
            response.delete_cookie("sessionid")
        # 方式二: session服务端会话技术
            del request.session["username"]
        # 方式三:同时删除cookie和session
            response = redirect(reverse("meituan:index"))
            request.session.flush()
    - 设置超时
        request.session.set_expire(30)
    
    在models.py中加入:
        token = models.CharField(max_length=100, null=True, default='')
        
    # token 唯一标识
    # 时间戳 + 随机数 + 公司域名 + IP
    # 时间戳 + 域名
    def generate_token():
        token = str(time.time()) + str(random.random())
        md5 = haslib.md5()
        md5.update(token.encode('utf-8'))
        return md5.hexdigest()
    
    user.token = generate_token()
    user.save()
    # 将token给客户端
    response.set_cookie("utoken", user.token)
    
    # 删除token
    response.delete_cookie("utoken")

    def password_sec(password):
        md5 = hashlib.md5()
        md5.update(password.encode('utf-8'))
        return md5.hexdigest()
上一篇下一篇

猜你喜欢

热点阅读