Django
2024-11-05T10:02:47+08:00 | 1 minute read | Updated at 2024-11-05T10:02:47+08:00

name: SY
signature: ‘@玥’
avatar:
date: 2024-11-05T11:30:00+08:00
tags:
- 编程笔记
参考链接
概念
# WSGI / uwsgi / uWSGI 这三个概念的区分。
(1) WSGI 是一种通信协议。
(2) uwsgi 是一种线路协议而不是通信协议,在此常用于在 uWSGI 服务器与其他网络服务器的数据通信。
(3) uWSGI 是实现了 uwsgi 和 WSGI 两种协议的 Web 服务器。
# Tornado
Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。
# RESTful 架构:
(1) 每个 URL 代表一种资源
(2) 客户端和服务器之间,传递这种资源的某种表现层
(3) 客户端通过四个 http 动词,对服务器资源进行操作,实现表现层状态转换
- GET 表示获取资源,POST 表示新建资源,PUT 表示更新资源,DELETE 表示删除资源。HTTP 协议中最常用的就是这四种操作方式。
knowledge
WSGI是Python在处理HTTP请求时,规定的一种处理方式
# django生命周期
. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端
请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中.
. url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配,
一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了.
. 视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端.
. 客户端浏览器接收到返回的数据,经过渲染后显示给用户.
# FBV CBV
FBV和CBV本质是一样的,基于函数的视图叫做FBV,基于类的视图叫做CBV
在python中使用CBV的优点:
- .提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
- .可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性
# cookie session
.cookie:
cookie是保存在浏览器端的键值对,可以用来做用户认证
.session:
将用户的会话信息保存在服务端,key值是随机产生的字符串,value值是session的内容
依赖于cookie将每个用户的随机字符串保存到用户浏览器上
Django中session默认保存在数据库中:django_session表
flask,session默认将加密的数据写在用户的cookie中
# django orm批量创建数据
objs=[models.Book(title="图书{}".format(i+15)) for i in range(100)]
models.Book.objects.bulk_create(objs)
# django的Form组件中,如果字段中包含choices参数,请使用两种方式实现数据源实时更新
1.重写构造函数
def__init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["city"].widget.choices = models.City.objects.all().values_list("id", "name")
2.利用ModelChoiceField字段,参数为queryset对象
authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all())//多选
# django中csrf的实现机制
第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把这个token保存在SESSION状态中;同时,后端把这个token放到cookie中交给前端页面;
第二步:下次前端需要发起请求(比如发帖)的时候把这个token值加入到请求数据或者头信息中,一起传给后端;Cookies:{csrftoken:xxxxx}
第三步:后端校验前端请求带过来的token和SESSION里的token是否一致。
---
Django notes.