1.WSGI,将请求封装之后交给web框架
2.中间件,对请求对象进行校验或者添加其他数据比如:csrf
3.路由匹配,根据不同的url匹配不同的视图函数
4.视图函数,在视图函数中对请求进行处理(可能涉及到ORM,Template渲染)
5.中间件,对响应的数据进行处理
6.WSGI,,将响应的内容发送给浏览器
FBV:基于函数的视图
CBV:基于类的视图
使用CBV的优点:
1.提高了代码的复用性,可以使用面向对象的技术,比如(多继承)
2.可以使用不同的函数对不同的HTTP方法进行处理,而不是使用if…else…判断,提高可读性
1.引入method_decorator模块
2.直接在类上添加装饰器
3.直接在方法上添加装饰器
MVC软件系统分为三个部分:模型(Model)、视图(View)和控制器(Controller)
MTV软件系统分为三个部分:模型(Model),模板(Templates),视图(View)
用户反向解析路由,相当于给url起了个别名,只要名字不变,即使路由改变,也能通过此名字找到路由
1.Admin是对model中对应的数据表进行增删改查提供的组件
2.model组件:负责操作数据库
3.form组件:1.生成HTML代码2.数据有效性校验3校验信息返回并展示
4.ModelForm组件即用于数据库操作,也可用于用户请求的验证
中间件是介于request与response处理之间的一道处理过程,用于在全局范围内改变Django的输入和输出。
简单的来说中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作
eg:
1.Django项目中默认启用了csrf保护,每次请求时通过CSRF中间件检查请求中是否有正确#token值
2.当用户在页面上发送请求时,通过自定义的认证中间件,判断用户是否已经登陆,未登陆就去登陆。
1.process_request : 请求进来时,权限认证
2.process_view : 路由匹配之后,能够得到视图函数
3.process_exception : 异常时执行
4.process_template_responseprocess : 模板渲染时执行
5.process_response : 请求有响应时执行
class WSGIHandler(base.BaseHandler):
request = self.request_class(environ)
请求走到WSGIHandler类的时候,执行__cell__方法,将environ封装成了request
1.使用HttpResponseRedirect
2.使用redirect和reverse
3.状态码:301和302
301:常用来做域名跳转(旧资源已经移除,跳转到新资源)
302:常用来做临时跳转(要访问的资源还在,但是没有条件访问)
第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把这个token保存在SESSION状态中;同时,后端把这个token放到cookie中交给前端页面;
第二步:下次前端需要发起请求(比如发帖)的时候把这个token值加入到请求数据或者头信息中,一起传给后端;Cookies:{csrftoken:xxxxx}
第三步:后端校验前端请求带过来的token和SESSION里的token是否一致;
以键值对的形式放到要传输的数据data中
1.runserver方法是调试 Django 时经常用到的运行方式,它使用Django自带的
WSGI Server 运行,主要在测试和开发中使用,并且 runserver 开启的方式也是单进程 。
2.uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http 等协议。注意uwsgi是一种通信协议,而uWSGI是实现uwsgi协议和WSGI协议的 Web 服务器。
uWSGI具有超快的性能、低内存占用和多app管理等优点,并且搭配着Nginx就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署 。
相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。
1.Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
2.Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
3.Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
4.Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
#<1> all(): 查询所有结果
#<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象。获取不到返回None
#<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个。获取不到会抱胸
#如果符合筛选条件的对象超过一个或者没有都会抛出错误。
#<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
#<5> order_by(*field): 对查询结果排序
#<6> reverse(): 对查询结果反向排序
#<8> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
#<9> first(): 返回第一条记录
#<10> last(): 返回最后一条记录
#<11> exists(): 如果QuerySet包含数据,就返回True,否则返回False
#<12> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系 model的实例化对象,而是一个可迭代的字典序列
#<13> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
#<14> distinct(): 从返回结果中剔除重复纪录
#F:对数据本身的不同字段进行操作 如:比较和更新
#Q:用于构造复杂的查询条件 如:& |操作
#values : 取字典的queryset
#values_list : 取元组的queryset
Form作用:
1.在前端生成HTML代码
2.对数据作有效性校验
3.返回校验信息并展示
ModeForm:
根据模型类生成From组件,并且可以操作数据库
#1.安装 pip install django-redis
#2.在stting中配置CACHES,可以设置多个缓存,根据名字使用
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
# "PASSWORD": "密码",
}
}
},
#另添加缓存
"JERD": { }
#3.根据名字去连接池中获取连接
from django_redis import get_redis_connection
conn = get_redis_connection("default")
1.在settings中设置要连接的数据库
2.生成model模型文件
python manage.py inspectdb
3.模型文件导入到models中
python manage.py inspectdb > app/models.py
#首先restful是一种软件架构风格或者说是一种设计风格,并不是标准,它只是提供了一组设计#原则和约束条件,主要用于客户端和服务器交互类的软件。
#就像设计模式一样,并不是一定要遵循这些原则,而是基于这个风格设计的软件可以更简洁,更#有层次,我们可以根据开发的实际情况,做相应的改变。
1.跟前端进行和交互,确定前端要什么
2.把需求写个文档保存
#1.pv:页面访问量,没打开一次页面PV计算+1,页面刷新也是
#2.UV:独立访问数,一台电脑终端为一个访客
#1.cookie session
#2.token 登陆成功后生成加密字符串
#3.JWT:json wed token缩写 它将用户信息加密到token中,服务器不保存任何用户信息
#服务器通过使用保存的密钥来验证token的正确性