线下---复习day02
1 后续课程安排
1 drf框架
2 git
3 redis使用
4 路飞项目(celery异步)
5 爬虫(mongodb)
6 linux
7 cmdb项目(资产收集)
8 代码发布系统
9 flask框架(给你一到两个项目)
10 数据结构和算法
11 docker,dockercompose(用docker部署项目,nginx负载均衡,横向扩展),k8s(看情况)
12 就业辅导(redis高级,Elasticsearch,如何提高项目并发量,分布式锁,分布式id,远程连接docker开发,git冲突如何解决)
2 作业讲解
#django.middleware.common.CommonMiddleware 中间件源码
# 核心代码(中间件)
from django.utils.deprecation import MiddlewareMixin
import json
class JsonMiddel(MiddlewareMixin):
def process_request(self, request):
try:
request.data=json.loads(request.body)
except Exception as e:
request.data=request.POST
# 关注的问题:
1 form表达和ajax提交的重复,form表单中input的submit类型和button按钮都会触发两次(有ajax的情况),input的button类型
2 from django.http.request import QueryDict
本质就是一个字典,比字典强大。不能修改值,一改就报错
3 CommonMiddleware中间件控制了是否重定向到带/的地址
3 python中的魔法方法
# __init__:类实例化会触发
# __str__:打印对象会触发
# __call__:对象()触发,类也是对象 类(),类的实例化过程调用元类的__call__
# __new__:在类实例化会触发,它比__init__早(造出裸体的人,__init__穿衣服)
# __del__:del 对象,对象回收的时候触发
# __setattr__,__getattr__:(.拦截方法),当对象.属性--》赋值会调用setattr,如果是取值会调用getattr
# __getitem__,__setitem__:([]拦截)
# __enter__和__exit__ 上下文管理器
setattr,getattr,setitem,getitem演示
# class Person:
# def __init__(self,name):
# self.name=name
# def __setitem__(self, key, value):
# setattr(self,key,value) #反射
# def __getitem__(self, item):
# return getattr(self,item) # 反射取值
#
# p=Person('lqz')
# # p.name='ppp'
# p['name']=10 # 如何变行 重写__setitem__魔法方法
# # print(p.name)
#
# print(p['name'])
# dic={'name':'lqz','age':19}
class Mydic(dict):
def __setattr__(self, key, value):
print("对象加点赋值,会触发我")
self[key]=value
def __getattr__(self, item):
print("对象加点取值,会触发我")
return self[item] # 不要加引号
mydic=Mydic(name='lqz',age=18)
# print(mydic['name'])
print(mydic.name)
# mydic.name=99
# print(mydic.name)
with 上下文管理器
class Person:
def __enter__(self):
print("我在with管理的时候,会触发")
print('进入with语句块时执行此方法,此方法如果有返回值会赋值给as声明的变量')
return 'oo'
def __exit__(self, exc_type, exc_val, exc_tb):
print('退出with代码块时执行此方法')
print('1', exc_type)
print('2', exc_val)
print('3', exc_tb)
with Person() as p: # 这句话执行,会触发类的__enter__
print(p)
eq
class A:
def __init__(self,x,y):
self.x = x
self.y = y
# def __eq__(self,obj):
# # 打印出比较的第二个对象的x值
# print(obj.x)
# if self.x +self.y == obj.x+obj.y:
# return True
# else:
# return False
a=A(1,2)
b=A(99,3)
print(a=='ddd') # 当执行==s时,会触发__eq__的执行,并且把b传进去,就是object
# ==后只要是对象,就可以传进去,就是object
4 cookie,session,token
# HTTP协议:无状态,无连接,基于请求响应,基于tcp/ip,应用层协议
# mysql:c/s架构:底层基于socket,自己封装的协议,mysql的客户端:navcate(c++图形化界面,实现了请求和响应协议),pymysql(用python语言实现了请求和响应协议)
# redis:c/s架构:底层基于socket,自己封装的协议
# docker:c/s架构,基于http协议,使用restfull规范
# elasticsearch:c/s架构,基于http协议,使用restfull规范
# cookie:是存在于浏览器的键值对,向服务端发送请求,携带它过去(不安全)
# session:存在于服务端的键值对(放在哪?内存中,文件,mysql,redis)
# 缺陷:如果用户量很大,存储需要耗费服务器资源
# token:就是个字符串(既安全,又存个人信息),加密字符串,会有个人信息
# token现在应用非常广泛,契合了前后端分离
# JWT:json web token
5 django中的session底层原理
# 在中间件中,请求走的时候,process_response,取出request.session的modify属性,判断是否是true,如果是true,表示在视图函数中修改过session,数据库同步修改,如果是false,就不修改,返回给前端sessionid:随机字符串
# 请求来了,通过sessionid,取出随机字符串--》去数据库中查--》把表的数据转成字典,赋值给request.session,后面视图函数中就可以操作它了
6 异常处理
try:
except :
finally:
else: 什么时候执行
try:
print("xxx")
# print(1/0)
except Exception as e:
print(e)
else: # 基本上不会用到
print("正常执行,没有出异常,会走")
finally:
print("我是finally") # 用于会走,无论是否有异常
7 pymysql的使用
import pymysql
#连接数据库
conn=pymysql.connect(host='101.133.225.166', user='root', password="123456",database='test', port=3306) #
# 获取游标
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) # 查出来数据是字典格式
# 操作 定义一个sql
# sql='select id,name from book'
# cursor.execute(sql)
# ret=cursor.fetchall()
# print(ret)
# 插入
# sql='insert into book(id,name) values (%s,%s)'
# cursor.execute(sql,[3,'lqz'])
# conn.commit()
# 删除
# sql='delete from book where name=%s'
# cursor.execute(sql,['lqz'])
# conn.commit()
# 更新
# sql='update book set name=%s where id=%s'
# cursor.execute(sql,['xxx',1])
# conn.commit()
作业
1 写一个类,有个name属性,如果name赋值为非字符串,就不让放
2 通过上下文管理器写一个mysql的连接,通过with管理
3 使用django实现token功能
线下---复习day02的更多相关文章
- 线下---复习day04---作业
1 学的不好的同学:用ajax提交一个json格式数据,返回一个json格式数据,console.log打印出来 2 通过ajax上传一个文件并保存起来,前端接收到,弹窗说上传成功 urls.py f ...
- 线下---复习day04
目录 1 Django与Ajax 2分页器组件 3 forms组件 4cookie与session组件 5中间件组件 6Auth模块 作业: 1 Django与Ajax # 通过ajax向https: ...
- 线下---复习day03
目录 django回顾 1 web应用,http协议,web框架 2 django请求生命周期 3 路由控制 4 视图层 5 模板层 6 模型层 django回顾 1 web应用,http协议,web ...
- 线下---复习day01
目录 1 个人介绍 2 关于编辑器 3 基础串讲 3.1 解释型和编译型 3.2 数据类型 3.2.1 一切皆对象 3.2.1 深浅copy 3.2.3 可变类型与不可变类型 3.3 字符编码 3.4 ...
- 这个立冬,我线下面基了一位TMD高级专家,太牛逼了!
立冬刚过,迎面而来的是一股寒气.天气如此,市场亦是如此.昨天周五,和1个认识的技术专家老刘约饭,也算是线下面基,增进感情.每年我都要向比我高阶的朋友讨教.不由自主聊到了他的职场生涯.鱼哥一直以为自己命 ...
- YY一下微信线下支付的场景
在上一篇文章里面提到了 <跨行清算的实现原理>,这次来分析一下线下支付的场景和流程. 今天看到一篇文章:http://www.huxiu.com/article/23248/1.html? ...
- ABP(现代ASP.NET样板开发框架)主题线下交流会(上海)开始报名了!
点这里进入ABP系列文章总目录 ABP主题线下交流会(上海)开始报名了 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称.它是采用最佳实践和流行技术 ...
- 微信公众平台"微信连Wi-Fi"功能来了 线下微信增粉利器
微信连Wi-Fi功能在第三方开发者和服务商已经有出现了,但有些成本相对会高些.近日微信公众平台新添了一个功能插件“微信连Wi-Fi”,已有微信认证过的公众号即可申请开通.赶紧去布局这个线下微信增粉利器 ...
- 从CR线下活动学到的:如何组织一个小的线下活动
作者:朱克锋 邮箱:zhukefeng@iboxpay.com 转载请注明出处:http://blog.csdn.net/linux_zkf 周末在腾讯组织了GR,活动达到了预期的收获,从这次活动我主 ...
随机推荐
- 权限系统设计(0):权限系统设计基本概念改需-MAC/RBAC引子
此篇主要对权限系统设计所涉的一些专业术语重点梳理.从我们windows的文件系统 自主访问控制 到基于角色访问控制. 权限设计基本术语 对后面会用到的词汇做一个简要说明 什么是权限(许可) 权限(Pr ...
- Python第三方库 - 安装
目录 1. 代码格式化 1.1. autopep8 1.2. YAPF 1.3. docformatter 2. 视觉相关 2.1. pyzbar, 条码(二维码)识别 2.2. tesserocr ...
- LAMP建站简介
1. LAMP概述 1.1 为什么是LAMP LAMP无非就是Linux+Apache+MySQL+PHP的网站架构体系而已.而之所以叫LAMP,就是取了这几个单词的首字母罢了,但这里的P可以指PHP ...
- @codeforces - 549E@ Sasha Circle
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定两个点集 M 与 S,求是否存在一个圆能够分割两个点集. 原 ...
- Chrome浏览器 Console调试台的简单使用
打开调试台 方法1:在chrome浏览器中打开网页,按下F12,点击下图框选内容. 方法2: 浏览器中鼠标右键选择查看网页源代码后,再按上图操作. 调试台的功能 (因为是第一次使用这个调试台,只能罗 ...
- Keiichi Tsuchiya the Drift King (c++三角函数公式)【几何+三角函数公式】
Keiichi Tsuchiya the Drift King 感谢: https://blog.csdn.net/xiao_you_you/article/details/89357815 题目链 ...
- VMWare虚拟机开启时显示模块“Disk”启动失败的解决方案
找到虚拟机所在的目录, 将 .vmx文件打开 将文件vmci0.present = "TRUE"改为 vmci0.present = "FALSE" 删除以.l ...
- [每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式
题目链接 题意 : 求斐波那契数列第n项 很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆 首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, ...
- Arduino连接LCD1602显示屏
简介 LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符.LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形.[百度百科] 引脚说明 ...
- Spring IOC原理补充(循环依赖、Bean作用域等)
文章目录 前言 正文 循环依赖 什么是循环依赖? Spring是如何解决循环依赖的? 作用域实现原理以及如何自定义作用域 作用域实现原理 自定义Scope BeanPostProcessor的执行时机 ...