1. web应用的本质
web应用,顾名思义就是需要在web上也就是浏览器上使用的应用程序,也就是说,它是一种B/S架构的应用程序.浏览器web作为客户端其内容不需要我们进行编写,我们只需要注意服务端的内容,以及由C/S到B/S的转换
回顾
socket网络编程:
架构:C/S架构
协议:TCP/UDP协议
使用范围:OSI五层模型中的传输层
web应用:
架构:B/S架构
协议:Http协议
使用范围:OSI五层模型中的应用层
本质
web应用与服务段之间的交互过程可以理解为:
-
用户点击浏览器界面
-
浏览器客户端向服务端发送一个http请求
-
服务器接收请求,生成出或者调用出一个对应的html文档
-
服务器将这个html文档作为响应体发给浏览器
-
浏览器收到响应,解析html文档内容并展示在页面中
2. 自定义web框架
我们在使用自制服务端与作为客户端的浏览器进行交互时,服务端接收到的与发送的数据有着特殊的格式,这就是http协议所要求的,符合http协议才可以进行客户端与服务端之间的交互
http协议:
请求头
请求头并不用我们自己编写,浏览器作为客户端在向服务端发送请求时会自带请求头,请求头的信息中会包含例如请求模式,IP地址,端口号,连接状态,浏览器内核等等信息
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; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 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
请求体
请求体是我们人为设定的
如果请求体的内容在服务端中可以找到对应内容或界面,则会返回相应的内容或界面,如果找不到则会报404 not found 的界面,这个界面是否是404 not found 我们也可以自行在服务端中控制或编写
响应头
HTTP/1.1 200 OK
响应头中HTTP/1.1表示协议版本,
200表示状态码,200为访问成功
OK表示状态
响应体
响应体是在服务端这一边想要发送给客户端浏览器进行展示的具体内容,通常可以是一个html文件,这样作为服务端的响应,用户在浏览器客户端点击后就会访问到新的页面
自己写web框架:
a. socket服务端(作为服务端与浏览器客户端之间通信的桥梁)
b. 路由系统(url与对应函数之间的映射关系,通常为了提高拓展性不在socket主体里写,而是存成列表内套字典的方式)
c .模板引擎渲染(可以自定义html渲染规则,也可使使用第三方的工具例如jinja2)
根据是否具备以上abc三种功能来对web框架进行分类可以分为:
- abc都有--->tornado框架
- 有bc,a需要引入第三方--->django(a一般为wsgiref或uwsgi)
- 有b,ac需要引入第三方--->flask
根据功能范围来对web框架进行分类可以分为:
- django(功能范围很广,例如orm,session,表单验证等等)
- 其它
3. django的安装和启动
安装方式:
- pip3 install django==1.11.22 -i https://pypi.tuna.tsinghua.edu.cn/simple
- pycharm内进行安装
创建方式:
- 命令行django-admin startproject 项目名
- pycharm内进行创建
django项目目录结构
项目名:
项目名:
settings.py: 配置文件
urls.py: 路由映射关系
wsgi.py : socket服务端文件
manage.py: 管理文件
4. django的路由介绍
在django项目内的urls.py文件中储存了路由和函数的对应关系:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', index),###此处是我们添加的路由
]
###此处是我们添加的函数
def index(request):
return HttpResponse('index')
5. django的模板介绍
模板渲染函数:
def f1(request):
return render(request, 'f1.html')
变量替换:
name = 'zekai'
render(request, 'f1.html', {"name":name})
html页面:
<h2>{{ xxx }}</h2>
以后再去创建django项目的时候, 需要做的几个操作:
到settings.py中, 配置:
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
#逗号不能少
#static目录需要创建
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',
]
'DIRS': [os.path.join(BASE_DIR, 'templates')]