详情看思维导图
s6day74
7、socket来回的收发消息,本质传输字节,所有的网络通信都基于socket
创建连接为什么不发字符串而发字节呢?
压缩 ,节省流量,
python3中字符串是unicode编码的,字节是将uncode编码成utf-8的字节
python2中的字符串其实就是python3中的字节,在字符串前面加个u就是unicode
send和recv拿到的都是字节
今日内容概要:
1. 课程介绍
Django必须会,示例程序【独立完成】
2. Http知识
3. Django请求生命周期
4. Django知识点
5. 需求写代码
内容详细:
1. 课程介绍
- 数据类型
- 函数
- 面向对象三大特性:继承,封装,多态
- socket:本质传输字节;所有网络通信都基于socket
- 数据库设计:单表、FK、M2M (自己作业:自己领域设计表,相亲网站)
- 会用:html/css/js/bootstrap
2. Http知识
基于Socket
浏览器(格式一):
Web服务器(格式一):
MySQL客户端(格式二):
MySQL服务端(格式二):
本质:
socket = socket.socket()
socket.connect((ip,端口))
socket.sendall(b'87ljas9802jlksjdf098jlksdf09')
浏览器发送GET请求数据格式:
socket = socket.socket()
socket.connect((ip,端口))
socket.sendall(b'GET /index/?name=xxx&age=11 http1.1\r\nAccept:text/html\r\nAccept-Encoding:gzip, deflate\r\nCookie:UM_distinctid=15d274\r\n\r\n')
request.GET.get('name')
浏览器发送POST请求数据格式:
socket = socket.socket()
socket.connect((ip,端口))
socket.sendall(b'POST /index/?name=xxx&age=11 http1.1\r\nAccept:text/html\r\nAccept-Encoding:gzip,deflate\r\nCookie:UM_distinctid=15d274\r\n\r\na1=123&a2=666&a3=xx')
Django加工POST请求的数据,
判断用户是否传递的是Django可以向request.POST中解析的数据?读取请求头Content-Type: application/x-www-form-urlencoded,那么就去解析request.body中的值,放置到request.POST中
a1=123&a2=666&a3=xx
request.POST.get('name')
request.body b"a1=123&a2=666&a3=xx"
Django加工POST请求的数据:{a1:123,a2:567}
request.POST 空
request.body b"{a1:123,a2:567}"
Http协议
- 请求头和请求体分割:\r\n\r\n
- 请求体之间:\r\n
- GET无请求体
- 无状态,短连接:socket请求响应断开
- 请求头代表的意义
- user-agent:来源
- referer: 防盗链
- content-type:请求体是什么格式?
3. Django请求生命周期
wsgiref:
函数版本:
from wsgiref.simple_server import make_server def run_server(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ] if __name__ == '__main__': httpd = make_server('127.0.0.1', 8000, run_server) # 请求一旦到来:run_server(..) httpd.serve_forever()
类版本:
from wsgiref.simple_server import make_server class WsgiHandler(object): def __call__(self,environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ] if __name__ == '__main__': obj =WsgiHandler() httpd = make_server('127.0.0.1', 8000, obj) # 请求一旦到来:obj(..) httpd.serve_forever()
# 类() ->会去调用 __init__
# 类()() ->会去调用 __call__
生命周期:图

注意:被坑的点
渲染工作在Django中执行完成后,字符串返回给浏览器。
但是:js,css额外再发一次请求仅获取静态文件
4. 问题:
a. TemplateDoesNotExist
- 写错误了
- 配置出错了
- 文件夹错了
b. 静态文件404
- 写错误
- 配置
- 文件夹
5. Django所有知识点:
知识点:
1. 路由规则
- /index/ func
- /\d+/ func()
- /?P<name(\d+)>/ func()
- include
- 反向生成URL:
- {%url ""%}
- reverse('a1',args=(1,))
2. 视图函数:
请求相关:
request:
method
GET.get/.getlist
POST
COOKIES
session
user
body
request.FILES
响应相关:
render
HttpResponse
redirect
3. 模板语言
if for
索引:.
执行:不加括号自动执行函数
filter和simple_tag
4. ORM操作
创建表:
类
字段:INT,CHA,FK,M2M
操作表:(CURD)
13个API操作
-
补充:
filter
values
vlaues_list
all/values/values_list all:列表 values:字典 values_list:元组
__
正向和反向
整理:
- 路由对应关系:
- 模板继承
- 模板标记标签:for,if,
- 返回:
- HttpResponse
- render
- redirect
- 启动
- Model类的创建,继承Model
- migrate
- 模板自定义函数:filter,sample_tag
- cookie和Session
- 基本配置文件:
- 模板
- 静态文件
- MySQL
和proejct同名的目录的__init__
- Model中自定义方法:__str__
- Model操作:
创建:
create
save
bulk_create
13中操作:
filter(nage='xx")
filter(**{age:18})
values('id')
values(*['id','name'])
values_list
last
first
all
distict
exclude
get
update(age=11)
update(**{age:11})
delete()
- 多对多查询(查询)
- URL别名,目的:反向生成URL
/detail/(\d+)/ name = a1
from django.url import reverse
url = reverse('a1',args=[6,])
- Django自带auth验证
- 模板
- 分页
- 分组和聚合
6. 作业
- 员工
- 设计能力
- 需求:学生,老师(用户名和密码),班主任(用户名和密码),班级关系
- 创建表: Model创建表
- 具体功能:
1. 不登录无能访问,除登录页面【session+装饰器】
2. 老师列表
- 创建老师
- 查看老师详细【老师年龄,姓名,电话,薪资】-任教班级
- 删除
- 修改
3. 班级列表
-
4.
学生列表
- 创建学生
浙公网安备 33010602011771号