python-django(day19)

- http请求本质
浏览器(socket客户端):
2、socket.connect(ip,端口)
3、socket.send("http://www.baidu.com/index.html")
规则:http协议
GET请求:
“GET /index.html?k1=1&k2=2 Http/1.1 host:www.baidu.com content-type:application/json ”

POST请求:
“POST /index.html?k1=1&k2=2 Http/1.1 host:www.baidu.com content-type:application/json username=alex&pwd=123123”

请求头和请求体使用 分割,前面头,后面是体


请求头:

请求体:

6、获取响应
响应头,响应体 = data.split(' ')
响应头与响应头之间用 分割

7、断开连接

网站(socket服务端):
1、服务端运行: 监听ip,端口
4、字符串 = server.recv()

头,体=data.split(“ =”)

request.POST.get()

5、服务端响应

conn.send('......')

响应头:

响应体:

7、断开连接


总结:
a. Http请求中本质都是字符串
b. Http请求短连接 (请求,响应,断开连接)
c. 请求以及响应都有: 头、体
请求头与请求体之间 分割 请求头下请求头之间用 分割


- Web框架

Django本质:
socket(django用的是别人的模块“wsgiref”)
解析和封装http请求(*)


使用Django:
a.安装
b.创建项目
project
django-admin startproject mysite

app
cd mysite
python manage.py startapp app01

写代码(******)

python manage.py runserver ip:port 启动

视图函数

def index(request):

request.GET
request.body #原生的请求体
request.POST #如果请求头中: content-type:urlencode-form...... 才将request.body原生内容转换成字典
-可能有值
-可能没值(是因为没做转换,可以去看下body有没有值)
request.method
request.Meta

request.GET.get()
request.GET.getlist() #前端用chkeckbox多选 ,select单选 ,想获取多个值 用getlist
request.POST

return HttpResponse(‘字符串/字节’)
return render(request,'html路径',{})
return redirect('URL') #返回的是URL,而不是URL对应的html数据

- 模板

- 继承
- 模板语言
for
if

- filter,sample_tag


- Model 操作
-创建表:业务线

- model.xx.objects.create(name='欧美')
- models.xx.objects.create(**dic)

-models.xx.objects.filter(id__gt=1).delete()
-models.xx.objects.filter(id=1).delete()
-models.xx.objects.exclude(id=1).delete()

-models.xx.objects.filter(id=1).update(name='ddd')
-models.xx.objects.filter(id=1).update(**dic)


创建表:
业务线
主机表
id host port baidu

# queryset = [对象,对象,。。。]
objs = models.xx.objects.all()
for row in objs:
row.id
row.host
row.port
row.bs.name

# queryset = [{},{}。。。。。]
- objs = models.xx.objects.all().values('id','host','port')

obj = models.xx.objects.filter(user='alex') 得到的是queryset
obj = models.xx.objects.filter(user='alex').fisrt()得到的是对象,只要是对象就可以.调用属性(字段)

obj.mm.add(1)
obj.mm.add(11)


queryset = obj.mm.all() alex负责的所有业务线 [业务线对象 ,业务线对象]

二手车业务线由哪些人负责
obj = models.business_unit.objects.filter(name="二手车").first
query = obj.userinfo_set.all() #【用户对象,用户对象】


今日内容:
1、登录:
- 密码,加密
- 用户登录之后,才能访问某些页面

2、cookie是什么?
- 保存在客户端浏览器上的键值对 {k:v}
- cookie依附在请求体或响应头中出现
- 发送请求时,会自动携带自己网站的cookie (浏览器通过域名或url进行分割对不同网站的cookie)

- 应用:
- 实现登录
- 投票

- 使用cookie:
- 设置cookie:

- 获取cookie

- cookie超时时间 path='/' 访问指定url时,才能读取到cookie 针对哪些url生效 / 根代表全部
- domain=None 当前域名或二级域名,默认是自己的当前域名


3、session
session是什么?
保存在服务端的键值对

ps:依赖cookie

# 1、生成随机字符串
# 2、cookie发送给客户端
# 3、服务端随机字符串作为key,自己设置一些value{}

在django中内部把上边三步都做了,只需要下面一条命令就可以
request.session['yyyyyyy'] = user

session的 key和value存在django.session 数据库表中


4、CSRF,跨站请求伪造

5、牛逼自定义分页

原文地址:https://www.cnblogs.com/zhangmeixia/p/7505028.html