Cookie Session AJAX

  1. Cookie是什么
    保存在浏览器端的键值对

     为什么要有Cookie?
     	因为HTTP请求是无状态的
     
     Cookie的原理?
     	服务端可以在返回响应的时候 做手脚
     	在浏览器上写入键值对(Cookie)
     	
     	浏览器发送请求的时候会自动携带该网站保存在我浏览器的键值对(Cookie)
     	
     Django 从请求携带的Cookie中取值:
     	request.COOKIES.get("is_login")
     	request.get_signed_cookie(key, default=None, salt="xxx")
     Django中设置Cookie:(针对的是响应对象)
     	rep = HttpResponse()/render(request, "test.html)/redirect()
     	rep.set_signed_cookie(key, value, salt="xxx", max_age=7)
     Django中删除Cookie:(注销)
     	rep.delete_cookie(key)
    
    1. Session是什么
      Session保存在服务端的键值对

      Session依赖于Cookie

      dsadasdsadsafsjkndf: {“is_login”: 1, “name”: “xiaohei”, “age”:18}
      dsaasdaknfgreryywdf: {“is_login”: 1, “name”: “xiaobai”, “age”:20}
      wqrqrteknfgzddasqfg: {“is_login”: 0, “name”: “xiaohui”, “age”:48}

      给浏览器写入Cookie:
      sessionid:wqrqrteknfgzddasqfg

      1. 从用户发来的请求的Cookie中 根据 sessionid 取值, 取到 wqrqrteknfgzddasqfg
      2. 根据特殊字符串找到对应的 Session 数据 --> {“is_login”: 0, “name”: “xiaohui”, “age”:48}
      3. request.session.get(“is_login”) --> 从Session取值

      Django中设置Session:
      request.session[“is_login”] = 1
      request.session.set_expiry(7) # 设置超时时间 (Cookie和Session数据的)

       在settings.py中设置,每次请求都刷新Session超时时间
       SESSION_SAVE_EVERY_REQUEST = True 
      

      Django中删除Session:
      request.session.flush() 清除Cookie和Session数据

       request.session.clear_expired()  将所有Session失效日期小于当前日期的数据删除
      
  2. 今日内容
    AJAX

    1. 预备知识 JSON

    2. 我们之前已经学过的发请求的方式:

      1. 直接在地址栏输入URL回车 GET请求
      2. a标签 GET请求
      3. form表单 GET/POST请求
      4. AJAX GET/POST请求
    3. AJAX 特点:

      1. 异步
      2. 局部刷新浏览器(偷偷发请求)
    4. jQuery封装的AJAX方法:
      先导入 jquery.js

       $.ajax({
       	url: "/test/",
       	type: "post",
       	data: {"key": "value", "key2":[[1, 2, 3], [4, 5, 6]]},
       	success: function(arg){
       		// 请求得到响应的时候,自动执行这个回调函数
       		console.log(arg);
       	}
       })
      
  3. 今日内容

    1. form组件的介绍

    之前web开发的模式,以注册为例:
    1. 要有一个注册的页面,页面里面要有form表单 --> 生成HTML代码
    2. form表单要能提交数据到后端,后端要做有效性校验 --> 数据有效性校验
    3. 要把校验的提示信息展示在页面上 --> 校验信息返回并展示,保存原来填写的内容

     关于校验:
     	1. 前端通过JS代码做校验    --> 最好有
     	2. 后端做校验              --> 必须要有(因为前端的校验可以被跳过)
    
    1. form组件的用法

      1. from django import forms
        2, 定义一个form类
        class RegForm(forms.Form):
        user = forms.CharField()
        pwd = forms.CharField()
        email = forms.EmailField()

      生成HTML:
      3. 实例化一个form对象, 传递到模板语言中
      4. 在目标语言中调用form对象的响应方法和属性

       三种方式:
       	1. {{ form_obj.as_p }}
       	2. 单独写
       		{{ form_obj.pwd.label }}
       		{{ form_obj.pwd }}
      

      做校验:
      1. form_obj = RegForm(request.POST)
      2. form_obj.is_valid()

      内置的正则校验器的使用
      mobile = forms.CharField(
      label=“手机”,
      # 自己定制校验规则
      validators=[
      RegexValidator(r’1+ , ) , R e g e x V a l i d a t o r ( r 1 [ 3 9 ] [ 0 9 ] 9 ', '手机号必须是数字'), RegexValidator(r'^1[3-9][0-9]{9} ’, ‘手机格式有误’)
      ],
      widget=widgets.TextInput(attrs={“class”: “form-control”}),
      error_messages={
      “required”: “该字段不能为空”,
      }
      )

    看源码:

     form_obj.is_valid()都干了什么?
     
     
     self._errors = ErrorDict()  --> {}
     self.cleaned_data = {}     
    
     self.fields.items()
     	字段名  字段对象
     
     
     如果有错误:
     	self._errors["name"] = ""
     
     没有报错:
     	self.cleaned_data["name"] = value(用户填写的值)
     	
     注意:
     钩子函数(hook)的使用
     
     def clean_xx():
     	"""具体字段的自定义校验方法"""
     	pass
     
     def clean():
         """全局的自定义校验方法"""
     	pass
    

errors:

  • name
    • 不符合社会主义核心价值观!
  • __all__
    • 两次密码不一致

  1. 0-9 ↩︎

猜你喜欢

转载自blog.csdn.net/qq_39161216/article/details/86556398