-
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)
-
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- 从用户发来的请求的Cookie中 根据 sessionid 取值, 取到 wqrqrteknfgzddasqfg
- 根据特殊字符串找到对应的 Session 数据 --> {“is_login”: 0, “name”: “xiaohui”, “age”:48}
- 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失效日期小于当前日期的数据删除
-
-
今日内容
AJAX-
预备知识 JSON
-
我们之前已经学过的发请求的方式:
- 直接在地址栏输入URL回车 GET请求
- a标签 GET请求
- form表单 GET/POST请求
- AJAX GET/POST请求
-
AJAX 特点:
- 异步
- 局部刷新浏览器(偷偷发请求)
-
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); } })
-
-
今日内容
- form组件的介绍
之前web开发的模式,以注册为例:
1. 要有一个注册的页面,页面里面要有form表单 --> 生成HTML代码
2. form表单要能提交数据到后端,后端要做有效性校验 --> 数据有效性校验
3. 要把校验的提示信息展示在页面上 --> 校验信息返回并展示,保存原来填写的内容关于校验: 1. 前端通过JS代码做校验 --> 最好有 2. 后端做校验 --> 必须要有(因为前端的校验可以被跳过)
-
form组件的用法
- 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} ′,′手机号必须是数字′),RegexValidator(r′1[3−9][0−9]9’, ‘手机格式有误’)
],
widget=widgets.TextInput(attrs={“class”: “form-control”}),
error_messages={
“required”: “该字段不能为空”,
}
) - from django import forms
看源码:
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__
- 两次密码不一致
0-9 ↩︎