一、web请求流程
从一个面试题说起:
当我们在浏览器中输入一个url地址的时候, 按下回车的那一刹那, 描述一下具体的过程
DNS: 记录着 域名以及IP的对应关系
根DNS服务器
顶级DNS服务器
权威DNS服务器
二级域名的DNS服务器
ps:
字符串和字节的转换:
>>> s = "hello"
>>> s
'hello'
>>> bytes(s,encoding='utf-8')
b'hello'
>>> b = bytes(s,encoding='utf-8')
>>> str(b, encoding='utf-8')
url:
127.0.0.1:8080/index/
Http协议:
请求头:
GET / HTTP/1.1
Host: 127.0.0.1:8080 (主机名)
Connection: keep-alive (保持链接)
Cache-Control: max-age=0 (缓存不失效)
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Token: bdsjalbdjsalbdjsa
请求体:
bdsabdjsabjddas
响应头:
HTTP/1.1 200 OK
响应体:
自己看到的内容
ps:
http: 默认端口是80
Https: 默认的端口是443
状态码:(*****************************)
2XX: 200 (ok)
3XX: 302 304
4XX: 404(not found) 403(forbidden 禁止访问)
5XX: 500 (服务端代码错误) 502 (网关错误 bad gateway)
Http图解
从一个面试题说起:
当我们在浏览器中输入一个url地址的时候, 按下回车的那一刹那, 描述一下具体的过程
DNS: 记录着 域名以及IP的对应关系
根DNS服务器
顶级DNS服务器
权威DNS服务器
二级域名的DNS服务器
ps:
字符串和字节的转换:
>>> s = "hello"
>>> s
'hello'
>>> bytes(s,encoding='utf-8')
b'hello'
>>> b = bytes(s,encoding='utf-8')
>>> str(b, encoding='utf-8')
url:
127.0.0.1:8080/index/
Http协议:
请求头:
GET / HTTP/1.1
Host: 127.0.0.1:8080 (主机名)
Connection: keep-alive (保持链接)
Cache-Control: max-age=0 (缓存不失效)
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Token: bdsjalbdjsalbdjsa
请求体:
bdsabdjsabjddas
响应头:
HTTP/1.1 200 OK
响应体:
自己看到的内容
ps:
http: 默认端口是80
Https: 默认的端口是443
状态码:(*****************************)
2XX: 200 (ok)
3XX: 302 304
4XX: 404(not found) 403(forbidden 禁止访问)
5XX: 500 (服务端代码错误) 502 (网关错误 bad gateway)
Http图解
二、自定义一个简单的web框架
需求:
想要通过输入不同的 url, 获得不一样的相应内容
路由系统:
routes = [
('/xxx', f1),
('/ooo', f2),
('/hhh', f3)
]
def f1():
return b'this is xxxx'
需求:
想要通过输入不同的 url, 获得不一样的相应内容
路由系统:
routes = [
('/xxx', f1),
('/ooo', f2),
('/hhh', f3)
]
def f1():
return b'this is xxxx'
def f2():
return b'this is oooo'
#################### 总结 ########
自定义的web框架:
a. sokect 服务端
b. uri 和 函数的 对应关系
路由系统
c. 将html代码和mysql的数据进行融合 (自己定制规则 , 使用第三方的工具)
模板引擎渲染
web框架分类:
第一种维度分类:
- a,b,c ----> tornado
- a(用第三方), b, c ----> django wsgiref uwsgi
- a(第三方),b, c(第三方) -----》 flask
第二种维度:
- django
- 其他
return b'this is oooo'
#################### 总结 ########
自定义的web框架:
a. sokect 服务端
b. uri 和 函数的 对应关系
路由系统
c. 将html代码和mysql的数据进行融合 (自己定制规则 , 使用第三方的工具)
模板引擎渲染
web框架分类:
第一种维度分类:
- a,b,c ----> tornado
- a(用第三方), b, c ----> django wsgiref uwsgi
- a(第三方),b, c(第三方) -----》 flask
第二种维度:
- django
- 其他
三、Django的基础
安装:
pip3 install django==1.11.10 -i https://pypi.tuna.tsinghua.edu.cn/simple
创建:
第一种:
django-admin startproject mysite
启动:
python3 manage.py runserver 127.0.0.1:8090
第二种:
pycharm创建
目录介绍:
mysite:
mysite:
settings.py : 用户自定义的各种配置
urls.py : 路由文件
wsgi.py : 启动socket服务端的 文件
mange.py: 管理文件 python mange.py 各种命令
js, css, img : 静态 文件
以后创建django完成之后:
a. 配置末班文件路径:
'DIRS': [os.path.join(BASE_DIR, 'templates')]
b. 配置静态资源的文件路径:
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'), (逗号不能少)
)
c. 注释中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]