一.今日内容总结
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.HTTP协议: 请求:浏览器发给服务端的消息 格式: 请求方法 URL 协议版本 k1: v1 k2: v2 请求体(请求数据) 响应:服务端返回给浏览器的消息 格式: 协议版本 状态码 状态描述符 k1: v1 k2: v2 响应体(HTML) 2. web框架 本质:socket服务端 功能: 1. socket收发消息 2. url和函数的对应关系,根据不同的URL执行不同函数 3. 字符串的替换(模板渲染) 3. web框架分类 实现1、2、3的框架 ——》 tornado 实现 2、3的框架,使用的第三方1 wsgiref uwsgi ——》 django 实现 2 的框架 ——》 flask 分类: 1、django 2、其他 4. 安装django 1. 命令行: pip install django==1.11.14 2. pycahrm安装 加号 输入django 选择版本 5. 启动django: 1. 命令行: python manage.py runserver # 127.0.0.1:8000 python manage.py runserver 80 # 127.0.0.1:80 python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80 2. pycahrm启动 1. 做配置 2. 点绿色三角(切记 不要右键启动)
1.http
1.http请求格式
请求行
请求方法+空格+请求地址url+空格+请求协议版本+/r/n
请求头部:
头部字段名:值/r/n
...............
/r/n
请求数据
2.http响应格式
响应行
协议版本+空格+状态码+空格+状态码描述+/r/n
响应头部
头部字段名:值/r/n
............
/r/n
响应正文
3.url
以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:
传送协议
层级URL标记符号(为[//],固定不变)
访问资源需要的凭证信息(可省略)
服务器: 域名或IP
端口号
路径:端口号后至?前
查询:问号后
片段:以“#”字符为起点
4.HTTP状态码
状态代码的第一个数字代表当前响应的类型:
1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误
2.socket web服务器搭建html动态显示版本
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import socket sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sk.bind(('127.0.0.1',8080)) sk.listen() while True: conn,addr = sk.accept() data = conn.recv(8092) url = data.decode('utf-8').split(' ')[0].split()[1] print(url) def rihan(url): return bytes('日韩', encoding='utf-8') def index(url): with open('index.html', 'r', encoding='utf-8') as f: res = f.read() return bytes(res, encoding='utf-8') def timer(url): import time with open('timer.html', 'r', encoding='utf-8') as f: res = f.read().replace('@@timer@@', time.strftime('%Y-%m-%d %H-%M-%S')) return bytes(res, encoding='utf-8') def favicon(url): with open('favicon.ico', mode='rb') as f: res = f.read() return res li1 = [ ("/rihan",rihan), ('/index',index), ('/timer',timer), ('/favicon.ico',favicon), ] func = None for i in li1: if i[0] == url: func = i[1] if func == favicon: conn.send(b'http/1.1 200 OK Content-Type:image/x-icon;charset=utf-8 ') conn.send(func(url)) elif func: conn.send(b'http/1.1 200 OK Content-Type:text/html;charset=utf-8 ') conn.send(func(url)) else: conn.send(b'http/1.1 200 OK Content-Type:text/html;charset=utf-8 ') conn.send(b'404') conn.close()
3.wsgiref模块和jinja2模块组合版本
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from jinja2 import Template from wsgiref.simple_server import make_server # 导入模块 def home(url): with open('home.html', 'r', encoding='utf-8') as f: data = f.read() return bytes(data, encoding='utf-8') def index2(url): with open('index2.html', 'r', encoding='utf-8') as f: data = f.read() template = Template(data) # 定义模板 res = template.render({'name': 'alex', 'items': ['抽烟', '喝酒', '烫头']}) # 渲染模板,传参字典类型 return bytes(res, encoding='utf-8') dic1 = { '/home/': home, '/index2/': index2, } def run_server(environ,start_response): start_response('200 Ok', [('Content-Type', 'text/html;charset=utf-8'), ]) # 响应行,响应头部 url = environ['PATH_INFO'] func = dic1.get(url) print(url) if func: response = func(url) else: response = b'404 not found!!!' return [response, ] if __name__ == '__main__': httpd = make_server('127.0.0.1', 8000, run_server) print('服务器已启动!') httpd.serve_forever()
4.启动Djongo
命令行安装:pip install django==1.11.14
命令创建工程:django-admin.py startproject 项目名
启动项目:
命令行方法:
pycharm方法:
二.预习和扩展
1.Django2.0 path与Django1.x版本url正则匹配问题
2.0内的path匹配正则时候无效,
导入re_path即可匹配正则