Django

pycharm快捷键
搜索/替换快捷键
序号 快捷键 作用
1 CTRL + F 查找
2 F3 查找下一个
3 SHIFT + F3 查找上一个
4 CTRL + R 替换
5 CTRL + SHIFT + F 指定路径下查找
6 CTRL + SHIFT + R 指定路径下替换

get请求:

会把客户产生的数据放到url上.,url是路径+请求参数

http请求协议格式:
协议+域名+端口号+url  ==>寻找服务器的某些文件等

http响应协议格式:
协议/版本+状态

客户产生的数据以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码

域名后面的第一个斜杠是根路径

url:超文本传输协议(HTTP)的统一资源定位符



post请求,将客户产生的数据放到了请求数据一栏.

当以127.0.0.1:9001访问的时候,默认后面是根路径.
如果在判断的时候,判断根路径,那发送的是访问页面的html文件给浏览器.

响应是在服务端响应



img的src属性和link的href属性都是异步的发送请求要图片(跟服务端要图片)
相当于src也是要发送一次请求给服务端,服务器必须在发送一次,将图片数据给浏览器,才能显示对于的图片效果


favicon.ico是浏览器要最上一栏图片(跟服务端要图片)
可以准备一个文件放入图片让他打包带走
如果在html文件中  有 标签 <link rel="icon" href="jd.com">,自己创建了一个小图标,那么浏览器自动要的是jd.com,如果没有这个标签,那么浏览器要的是favicon.ico这个文件.


只要是图片等有路径引入问题现象,如果服务端的html文件中引入了自己服务端的路径,并且在html文件中写的是相对路径.,在发送给浏览器渲染的时候,因为路径问题,会导致图片显示不出来,为了能够在浏览器上有展示出来的效果,浏览器会自动向服务端要图片等文件,这时候服务顶端要找到文件打开并且发送走

或者理解为只要是在服务端html文件中涉及到路径问题,在服务端将html文件发送到客户端(浏览器)的时候,客户端一定会在向服务端索要,因为路径的问题,所以为了在浏览器上达到渲染效果,服务端在接收到客户端(浏览器)的请求时,通过转换成字符串,然后进行分割判断来发送不同的请求数据,

反是索要的东西都可以创建文件放进去.然后在浏览器索要的时候取出来带走,浏览器页面要以html后缀形式


路径前面必须有根路径,没有就默认


客户端输入网址,比如要百度页面,服务端接收消息并且将百度页面文件(html文件)发送给浏览器,浏览器自上而下解析,如果遇到src和link,会在一次的向服务端要图片数据,如果src路径写的是相对路径,会把客户输入的网址和src路径拼接起来向服务端要.图片数据,服务器必须在发送一次,将图片数据给浏览器,才能显示对于的图片效果


客户端就是一个软件或者浏览器,需要客户去输入,输入的时候是协议+域名+端口号+url  

如果浏览器向服务端请求比较多的时候,服务端在接收转换成字符串以后可以通过切片的形式,来进行判断是索要什么,然后在去打开文件将他们发走,这样就显示出来效果了


css一般写到一个文件里面,先创建一个后缀为css的文件,在html中引入<link rel="stylesheet" href="server.css">

http请求有get和post

动态数据是每次刷新页面有些数据会发生变化,不是页面打开或者不打开都会动的数据(这种每次打开都会动的效果是定时器来完成).
动态页面的方法是在html文件中加入一个标签,里面标记特殊的符号,供后台替换对应的数据.然后在服务端读取的时候以r模式读取,然后替换就可以了.

动态页面是由计时器完成,动态数据是由时间戳完成

函数版Django框架(简单版)

服务端
import socket,time
sk=socket.socket()
sk.bind(('127.0.0.1',8601))
sk.listen()
t=str(time.time())
def html():
	with open('04.html','r',encoding='utf-8')as f:
		data_str = f.read()
		data_str=data_str.replace('%oo%',t)
		data=data_str.encode()
		return data
def css():
	with open('server.css', 'rb')as f:
		data = f.read()
		return data
def js():
	with open('jquery.js', 'rb')as f:
		data = f.read()
		return data
def jpg():
	with open('4.jpg', 'rb')as f:
		data = f.read()
		return data
def ico():
	with open('jd.ico', 'rb')as f:
		data = f.read()
		return data
url_list=[('/',html),('/server.css',css),('/jquery.js',js),('/4.jpg',jpg),('/jd.ico',ico)]
while 1:
	print('等待客户端的连接')
	conn,addr=sk.accept()
	msg=conn.recv(1024)
	msg=msg.decode()
	print(msg)
	path=msg.split(' ')[1]
	conn.send(b'HTTP/1.1 200 ok \r\n\r\n')
	for item in  url_list:
		if  path == item[0]:
			data=item[1]()
			conn.send(data)
			conn.close()
			break
	else:
		conn.send(b'sorry not found')
		conn.close()

html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>皇家赌场</title>
<link rel="stylesheet" href="bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/css/bootstrap.min.css">
 <link rel="icon" href="jd.ico">
<link rel="stylesheet" href="server.css">
</head>
<body>
<div id="d1">顶部</div>
<h1>皇家赌场</h1>
<span>%oo%</span>
<div class="c1"></div>
<div class="c2"></div>
<div class="c3">
   <img src="4.jpg"  alt="这是一张图片" title="葫芦娃">
</div>

<div class="c4">
<a href="#d1">回到顶部</a>
</div>
</body>
<script src='jquery.js'></script>
<script>
</script>
</html>


server.css代码:
.c1{
background-color:red;
height:500px;
}
.c2{
background-color:green;
height:500px;
}
.c3{
height:100px;
width:500px;
}
.c4{
position:fixed;
left:20px;
bottom:20px;
border:1px solid red;
border-radius:5%
background-color:pink;
}
img{
width:100%;
}


反爬机制;
import requests

response=requests.get('https://dig.chouti.com/',headers={
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
})
data=response.content
with open('ct.html','wb')as fp:
	fp.write(data)

headers={键值对的形式 注意引号} 反爬

线程版Django框架(简单版)

服务端
import socket,time
from   threading  import Thread
sk=socket.socket()
sk.bind(('127.0.0.1',9003))
sk.listen()

def html(conn):
	t = str(time.time())
with open('04.html','r',encoding='utf-8')as f:
	data_str = f.read()
	data_str=data_str.replace('%oo%',t)
	data=data_str.encode()
	conn.send(data)
	conn.close()
def css(conn):
	with open('server.css', 'rb')as f:
	data = f.read()
	conn.send(data)
	conn.close()
def js(conn):
	with open('jquery.js', 'rb')as f:
	data = f.read()
	conn.send(data)
	conn.close()
def jpg(conn):
	with open('4.jpg', 'rb')as f:
	data = f.read()
	conn.send(data)
	conn.close()
def ico(conn):
	with open('jd.ico', 'rb')as f:
	data = f.read()
	conn.send(data)
	conn.close()
url_list=[('/',html),('/server.css',css),('/jquery.js',js),('/4.jpg',jpg),('/jd.ico',ico)]
while 1:
print('等待客户端的连接')
conn,addr=sk.accept()
msg=conn.recv(1024)
msg=msg.decode()
print(msg)
path=msg.split(' ')[1]
conn.send(b'HTTP/1.1 200 ok \r\n\r\n')
for item in  url_list:
	if  path == item[0]:
		t= Thread(target=item[1], args=(conn,))
		t.start()
		break
else:
	conn.send(b'sorry not found')
	conn.close()

html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>皇家赌场</title>
<link rel="stylesheet" href="bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/css/bootstrap.min.css">
 <link rel="icon" href="jd.ico">
<link rel="stylesheet" href="server.css">
</head>
<body>
<div id="d1">顶部</div>
<h1>皇家赌场</h1>
<span>%oo%</span>
<div class="c1"></div>
<div class="c2"></div>
<div class="c3">
   <img src="4.jpg"  alt="这是一张图片" title="葫芦娃">
</div>

<div class="c4">
<a href="#d1">回到顶部</a>
</div>
</body>
<script src='jquery.js'></script>
<script>
</script>
</html>


server.css代码:
.c1{
background-color:red;
height:500px;
}
.c2{
background-color:green;
height:500px;
}
.c3{
height:100px;
width:500px;
}
.c4{
position:fixed;
left:20px;
bottom:20px;
border:1px solid red;
border-radius:5%
background-color:pink;
}
img{
width:100%;
}

#回复不同HTML的框架

服务端
import socket,time
from   threading  import Thread
sk=socket.socket()
sk.bind(('127.0.0.1',9003))
sk.listen()

def html(conn):
	t = str(time.time())
	with open('04.html','r',encoding='utf-8')as f:
	data_str = f.read()
	data_str=data_str.replace('%oo%',t)
	data=data_str.encode()
	conn.send(data)
	conn.close()
#当我们添加一个回复的html文件操作的时候,针对我们框架,我们只需做三步:
#创建一个返回html的文件函数.
#如果需要动态添加数据,就在html文件中写入我们自己定义的特殊符号数据
#在url_list列表中写一个路径和函数的对应关系
#注意:如果是以html文件返回的函数,在列表中添加路径可以自定义,因为返回的html文件相当于客户第一次去访问,可以自定义路径(相当于根路径)
 如果不是以html文件返回的函数,是一些图片或者其他返回的函数,在列表中写的路径对应的函数,路径必须是以打开文件名作为路径,不能自定义路径.
#在创建其他html文件的时候,如果想通过主html文件看到,可以在主	html文件做一个a标签,href属性值必须和列表的路径一致
#思路:
#通过服务端,创建函数(函数里面写打开每个的文件),然后在以函数和路径作为一对元组放到列表中,然后将接受的数据变成字符串分割,
#得到路径,然后for循环判断路径,在去调用函数.可以是多线程...
def html1(conn):
with open('04person.html','rb')as f:
	data=f.read()
	conn.send(data)
	conn.close()
def css(conn):
with open('server.css', 'rb')as f:
	data = f.read()
	conn.send(data)
	conn.close()
def js(conn):
with open('jquery.js', 'rb')as f:
	data = f.read()
	conn.send(data)
	conn.close()
def jpg(conn):
with open('4.jpg', 'rb')as f:
	data = f.read()
	conn.send(data)
	conn.close()
def ico(conn):
with open('jd.ico', 'rb')as f:
	data = f.read()
	conn.send(data)
	conn.close()
url_list=[('/',html),('/server.css',css),('/jquery.js',js),('/4.jpg',jpg),('/jd.ico',ico),('/04person',html1)]
while 1:
print('等待客户端的连接')
conn,addr=sk.accept()
msg=conn.recv(1024)
msg=msg.decode()
print(msg)
path=msg.split(' ')[1]
conn.send(b'HTTP/1.1 200 ok \r\n\r\n')
for item in  url_list:
	if  path == item[0]:
		t= Thread(target=item[1], args=(conn,))
		t.start()
		break
else:
	conn.send(b'sorry not found')
	conn.close()

html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>皇家赌场</title>
<link rel="stylesheet" href="bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/css/bootstrap.min.css">
 <link rel="icon" href="jd.ico">
<link rel="stylesheet" href="server.css">
</head>
<body>
<div id="d1">顶部</div>
<h1>皇家赌场</h1>
<a href="http://127.0.0.1:9000/04person">个人中心</a>
<span>%oo%</span>
<div class="c1"></div>
<div class="c2"></div>
<div class="c3">
   <img src="4.jpg"  alt="这是一张图片" title="葫芦娃">
</div>

<div class="c4">
<a href="#d1">回到顶部</a>
</div>
</body>
<script src='jquery.js'></script>
<script>
</script>
</html>


server.css代码:
.c1{
background-color:red;
height:500px;
}
.c2{
background-color:green;
height:500px;
}
.c3{
height:100px;
width:500px;
}
.c4{
position:fixed;
left:20px;
bottom:20px;
border:1px solid red;
border-radius:5%
background-color:pink;
}
img{
width:100%;
}

04person.html代码:
<h1>欢迎来到个人中心,请充值之后使用</h1>

wsgiref版web框架(类似socket)

服务端
import time
import wsgiref ==>必须这样写

from wsgiref.simple_server import make_server  ==>必须这样写

def html():
t = str(time.time())
with open('04.html','r',encoding='utf-8')as f:
	data_str = f.read()
	data_str=data_str.replace('%oo%',t)
	data=data_str.encode()
	return data
def html1():
with open('04person.html','rb')as f:
	data=f.read()
	return data
def css():
	with open('server.css', 'rb')as f:
	data = f.read()
	return data
def js():
with open('jquery.js', 'rb')as f:
	data = f.read()
	return data
def jpg():
with open('4.jpg', 'rb')as f:
	data = f.read()
	return data
def ico():
with open('jd.ico', 'rb')as f:
	data = f.read()
	return data
url_list=[('/',html),('/server.css',css),('/jquery.js',js),('/4.jpg',jpg),('/jd.ico',ico),('/04person',html1)]

def application(environ, start_response):  ==>必须这样写

print('请求数据>>>>>>',environ)
path=environ['PATH_INFO']   ==>必须这样写
不需要分割路径,直接循环判断
for item in url_list:
	if path == item[0]:
		data=item[1]()
		break
else:
	data=b'sorry not found'
start_response('200 OK', [('k1', 'v1'), ])  ==>必须这样写

return [data] ==>必须这样写

httpd = make_server('127.0.0.1',9000, application) ==>必须这样写
httpd.serve_forever() ==>必须这样写

	html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>皇家赌场</title>
<link rel="stylesheet" href="bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/css/bootstrap.min.css">
 <link rel="icon" href="jd.ico">
<link rel="stylesheet" href="server.css">
</head>
<body>
<div id="d1">顶部</div>
<h1>皇家赌场</h1>
<a href="http://127.0.0.1:9003/04person">个人中心</a>
<span>%oo%</span>
<div class="c1"></div>
<div class="c2"></div>
<div class="c3">
   <img src="4.jpg"  alt="这是一张图片" title="葫芦娃">
</div>

<div class="c4">
<a href="#d1">回到顶部</a>
</div>
</body>
<script src='jquery.js'></script>
<script>
</script>
</html>


server.css代码:
.c1{
background-color:red;
height:500px;
}
.c2{
background-color:green;
height:500px;
}
.c3{
height:100px;
width:500px;
}
.c4{
position:fixed;
left:20px;
bottom:20px;
border:1px solid red;
border-radius:5%
background-color:pink;
}
img{
width:100%;
}

04person.html代码:
<h1>欢迎来到个人中心,请充值之后使用</h1>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值