---恢复内容开始---
web框架的本质
所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端
自定义web框架
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('127.0.0.1', 8000)) sock.listen() while True: conn, addr = sock.accept() data = conn.recv(8096) print(data) # 给回复的消息加上响应状态行 conn.send(b"HTTP/1.1 200 ok\r\n\r\n") #请求头,自定义状态码 conn.send(b"OK") conn.close()
根据不通的路径返回不通的内容
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('127.0.0.1', 8000)) sock.listen(5) while True: conn, addr = sock.accept() data = conn.recv(8096) url = data.decode('utf-8').split()[1] print(url) # 给回复的消息加上响应状态行 conn.send(b"HTTP/1.1 200 ok\r\n\r\n") # conn.send(b"OK") if url == '/index': conn.send(b'index') else: conn.send(b'404')
根据不通的路径返回不通的内容(函数版)
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('127.0.0.1', 8000)) sock.listen(5) def oumei(url): ret = '这是一个%s页面' % url return ret.encode('utf-8') while True: conn, addr = sock.accept() data = conn.recv(8096) url = data.decode('utf-8').split()[1] print(url) # 给回复的消息加上响应状态行 conn.send(b"HTTP/1.1 200 ok\r\n\r\n") # conn.send(b"OK") if url == '/index': res = oumei(url) else: conn.send(b'404')
返回html
import socket # 创建一个socket对象 sk = socket.socket() # 绑定IP和端口 sk.bind(('127.0.0.1', 8000)) # 监听 sk.listen() # 定义函数 def oumei(url): ret = "{} --- oumei".format(url) return ret.encode('utf-8') def rihan(url): ret = "{} --- rihan".format(url) return ret.encode('utf-8') def guochan(url): ret = "{} --- guochan".format(url) return ret.encode('utf-8') def index(url): with open('index.html', 'rb') as f: return f.read() list1 = [ ('/oumei/', oumei), ('/rihan/', rihan), ('/guochan/', guochan), ('/index/', index), ] # 等待连接 while True: # 接受连接 conn, addr = sk.accept() # 接受数据 data = conn.recv(1024) # 获取路径 url = data.decode('utf-8').split()[1] # 发送数据 conn.send(b'HTTP/1.1 200 OK\r\n\r\n') for i in list1: if i[0] == url: res = i[1](url) break else: res = b'404' # func = None # for i in list1: # if i[0] == url: # func = i[1] # break # if func: # res = func(url) # else: # res = b'404' conn.send(res) # 断开连接 conn.close()
动态返回html
import socket # 创建一个socket对象 sk = socket.socket() # 绑定IP和端口 sk.bind(('127.0.0.1', 8000)) # 监听 sk.listen() # 定义函数 def oumei(url): ret = "{} --- oumei".format(url) return ret.encode('utf-8') def rihan(url): ret = "{} --- rihan".format(url) return ret.encode('utf-8') def guochan(url): ret = "{} --- guochan".format(url) return ret.encode('utf-8') import time def timer(url): now = time.strftime('%Y-%m-%d %H:%M:%S') with open('time.html', 'r', encoding='utf-8') as f: data = f.read() data = data.replace('@@time@@', now) return data.encode('utf-8') def index(url): with open('index.html', 'rb') as f: return f.read() list1 = [ ('/oumei/', oumei), ('/rihan/', rihan), ('/guochan/', guochan), ('/index/', index), ('/time/', timer), ] # 等待连接 while True: # 接受连接 conn, addr = sk.accept() # 接受数据 data = conn.recv(1024) # 获取路径 url = data.decode('utf-8').split()[1] # 发送数据 conn.send(b'HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n') for i in list1: if i[0] == url: res = i[1](url) break else: res = b'404' # func = None # for i in list1: # if i[0] == url: # func = i[1] # break # if func: # res = func(url) # else: # res = b'404' conn.send(res) # 断开连接 conn.close()
Django
安装:
1. 下载 ;
pip install django==1.11.20 -i https://pypi.doubanio.com/simple
2.创建项目;
django-admin startproject 项目名称
3. 启动
1. 命令行
切换到项目的根目录下 manage.py
python manage.py runserver # http://127.0.0.1:8000/
python manage.py runserver 80 http://127.0.0.1:80/ #指定端口
python manage.py runserver 0.0.0.0:80 # http://0.0.0.0:80/ #指定端口和ip
启动Django报错: UnicodeEncodeError ...
报这个错误通常是因为计算机名为中文,改成英文的计算机名重启下电脑就可以了。
使用
编辑settings.py文件指定谁可以使用Django项目:
在urls.py文件内写代码:
---恢复内容结束---