今日内容
1 web应用
1.用浏览器访问的应用程序
2.优点:
-不需要客户端
-更新直接在服务端更新,客户端感知不到
-跨平台性好
3.缺点:
-强调浏览器的适用性
-用户的数据都保存在软件厂商那边
2 bs、cs架构
1.bs:浏览器---服务端(本质还是cs)
2.cs:客户端---服务端
3 手写一个web应用
1.客户端是浏览器,服务器自己写(python)
2.静态页面,动态页面
-静态页面:内容不会改变,每次看到的数据都一样
-动态页面:页面的数据会变化,每次访问看到的可能都不一样(数据来源可能是数据库)
import socket
server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5)
while True:
conn, addr = server.accept()
data = conn.recv(1024)
print(data)
import time
ctime = time.time()
with open('/Users/moyan/PycharmProjects/python15/讲义/125 web应用/a.html', 'r', encoding='utf-8') as f:
data = f.read().replace('{
{time}}', str(ctime))
response = 'HTTP/1.1 200 ok \r\n\r\n %s' % data
conn.send(response.encode('utf-8'))
conn.close()
4 http协议
1. HTTP协议:HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议
2. 应用层的协议
3. http协议特性(***):
-1 基于tcp/ip之上的应用层协议
-2 基于*请求-响应*模式
-3 无状态保存(由此引发了很多问题cookie...)
-4 无连接
4.请求协议(浏览器发出来的)(****)
"""
# 请求首行(以第一个\r\n区分的),
# 1请求方式:get/post,2请求地址:/,3协议版本号:HTTP/1.1
b'GET / HTTP/1.1\r\n
# 请求头(key:value形式)
Host: 127.0.0.1:8080\r\n
Connection: keep-alive\r\n
Cache-Control: max-age=0\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36\r\n
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
Sec-Fetch-Site: none\r\n
Sec-Fetch-Mode: navigate\r\n
Sec-Fetch-User: ?1\r\n
Sec-Fetch-Dest: document\r\nA
ccept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8\r\n\r\n'
# \r\n\r\n下面的是请求体的内容
....
"""
5.响应协议
"""
# 响应首行 响应协议和版本:HTTP/1.1 响应的状态码和标准:200 ok
HTTP/1.1 200 ok \r\n
# 响应头(key:value形式)
key:value
key:value
\r\n\r\n
#响应体:在浏览器里看到的东西()
<!DOCTYPE html>
<html lang="en">
<h1>内容</h1>
</html>
"""
6.响应状态码
-1xx:请求正在处理(用户一般看不到)
-2xx:200(请求成功)
-3xx:301 302(重定向,访问一个地址,转到另一个地址)
-4xx:404(客户端错误)
-5xx:502(服务端错误)
7.url:统一资源定位符
http://127.0.0.1:8080
ftp://xxx
协议://IP:端口(80)/路径?name=lqz&age=18
(?之前的是请求路径,?之后的是请求数据部分)
5 web框架
1 web框架就是在几十行代码基础上扩展出来的,有很多简单方便使用的方法,大大提高了开发效率
6 基于wsgiref 写一个web框架
1 sooket自己写,借助于一个模块,已经实现了socket
2 wsgiref: django默认使用的
3 在web框架上继续开发
-以后路径都去urls.py中写
-路径匹配以后执行的函数,都放在views.py
-数据库相关操作,在models.py中
7 dgango与其他web框架区别
1 python中主流web框架:django、flask、tornado、sanic、fastapi....
socket假设叫:a
路由的映射关系:b
模版渲染: c
自己写的web框架:a用第三方wsgiref b自己写的 c自己写的
django: a用第三方wsgiref b自己写的 c自己写的
flask: a用第三方 b自己写的 c第三方的
tornado: a自己写的 b自己写的 c自己写的
8 django安装与简单使用
1 安装的几种方式
-pip3 install django==1.11.09 默认装最新版本(3.x)
-pycharm中-->setting-->解释器-->点+-->选版本,安装
2 装完以后,会多出一个命令:django-admin,
在D:\python38\Scripts 路径下
3 django-admin是用来创建django项目的命令(创建项目就是生成目录,生成一堆py文件)
4 创建项目
django-admin startproject 项目名
django-admin startproject my1stdjango
5 创建完成后,用pycharm打开
6 在项目根路径创建app
python3 manage.py startapp app名字
7 django目录结构:
-views.py:函数,视图函数
-urls.py:路径(路由)和视图函数对应关系
-models.py:表模型(数据库操作相关)
100 问题
1 计算机名是中文,项目路径中有中文空格,都可能报错
2 python 3.8/3.7 对django
作业
1 http状态码有哪些
2 http的请求头和http的响应头有哪些
3 django装好,跑起一个hello world
4 发博客
5扩展:
-在django 中实现访问index、返回一个页面
-在django 中实现访问login、返回一个登陆页面(form表单)