一、pycharm创建项目的环境
1.create project 创建项目
2.选择 django项目
3.location中选择项目的位置
4.project interpreter — 选择一个已经存在的虚拟环境
5.more setting中
template language选择django
设置一个 application name 即可
6.配置…
二、cookie
- 会话技术
- 客户端的会话技术( 数据库保存在浏览器上)
- 问题导致原因: 在web应用中, 一次网络请求是从request开始, 到response结束, 跟以后的请求或者跟其他请求没有关系, 导致每次请求之间的数据没有关系 (短链接,长连接:QQ)
解决: 在客户端保留数据(cookie)或者服务端保留数据(session)来建立关系 - cookie的使用
-
存
格式:response.set_cookie(key,value)
通过response通知浏览器要保存key, value形式的cookie -
取
如果浏览器保留了cookie, 那么每次请求该服务器的时候, 会自动的携带该cookie
格式:request.COOKIES.get(key)
-
设置过期时间
默认情况下,关闭浏览器cookie就会过期,有时候我们需要设置过期时间:
格式:response.set_cookie(key,value,expires=值)
expires=0 立马过期
expires=None 永不过期
expires= 值 单位是秒
expires=timedelta(days=值)
表示多少天后过期hours=值
表示多少小时后过期… -
删除
response.delete_cookie(key)
-
cookie的应用场景:1.保存账号,密码 2.京东的购物车 3.保留用户的浏览信息 …
-
**cookie中文问题: response.set_cookie(key,json.dumps(value))
即可
三、session
1.会话技术
2.服务端的会话技术
3.需要客户端的支持才可以
4.使用:
-
存
格式:request.session[key] = value
注意:在django中存储了一个session后,django会 自动 的生成session key,并将session key与 数据自动的存储到 django_session表中去,数据会自动的用base64编码,
并会 自动 的让浏览器的cookie存储 sessionid(就是sessison key) -
取
格式: value = request.session.get(key)
注意: 在django中,会 自动 的将cookie中的sessionid拿出来跟数据库中的session key匹配,匹配成功后既可以获取值 -
清除
- 清除对应的cookie
del request.session
request.session.flush()
会清楚对应的cookie及session
5.应用: 用户登陆认证
四、案例: 登陆,注册功能
1.token 就是自定义session ,token是唯一的
-
注册
- 设计数据模型
name,password,age,token - 注册界面
- 注册功能
- 获取输入的信息
- 创建user对象
- 设置对应的属性
- 密码需要md5处理
- token需要是一个唯一的字符串标识
- 保存
- 设计数据模型
-
登陆
- 登陆界面,登陆功能一同处理(根据method来判断)
- 登陆功能
- 获取输入的账号,密码
- 根据账号来筛选用户
-
找到用户user
- 判断找到的user的密码与输入的密码(需要md5处理)是否一致
- 密码正确
保存token到客户端/保存session
跳转到首页 - 密码不正确—提示
再次登陆
- 密码正确
- 判断找到的user的密码与输入的密码(需要md5处理)是否一致
-
没找到—提示
再次登陆
-
-
首页
- 使用token,或者session来获取用户信息
- 是否找到了对应的用户
- 找到了
用户信息,登陆成功的信息 - 没找到
登陆,注册
- 找到了
-
单点登录
问题: 一个账户可能在多个地方同时登陆
解决: 新登陆的时候,跟换一个新的token
如:
登录成功之后生成一个新的token,生成新的之后,之前登陆的就失效了, 可以实现单点登录
user.u_token = createToken()
user.save()
五、MD5—信息摘要–加密
md5可以将任何一个二进制的数据通过数学算法,转换成一个一定长度(128位)的二进制数据
特点:
- 结果是唯一的,不可能重复
- 不可逆
作用:
- 通常用来加密密码
- 通常用来验证一个数据的完整性
1.使用md5处理
# 创建一个md5对象
MD5 = hashlib.md5()
# 将一个二进制数据进行md5处理, 生成一个128位的二进制数据
# 4位的二进制是一位的十六进制
MD5.update(password.encode("utf-8"))
# 将二进制结果转换成32位十六进制的结果
password = MD5.hexdigest()
print(password)
六、生成一个唯一性的字符串:
1.自己生成: # 唯一的字符串规则: 时间戳 + 随机数(很多位) + 公司的域名
mytoken = str(time.time()) + str(random.randint(100000,999999)) + "www.baidu.com"
2.也可以使用模块:uuid
# 生成一个唯一的uuid
myuuid = uuid.uuid4()
print(myuuid)
七、编码/解码、加密/解密
编码/解码
编码: 将一个数据按照码表转换成二进制的形式 encode
解码: 解码将二进制的数据转换成可视形式的数据 decode
解码的时候码表必须与编码的码表一致
常见的编码格式:
UTF-8,gbk,base64
加密/解密
1.DES 对称加密 ----- 加密的密钥与解密的密钥是同一个密钥
2.RSA 非对称加密 ----- 加密的密钥(公钥)与解密的密钥(私钥) 不是 同一个密钥
3.md5/sha 信息摘要 ----- 可以将任何一个二进制的数据通过数学算法,转换成一个一定长度的二进制数据,而该数据不可逆且唯一