本帖最后由 阎兆辉 于 2019-7-2 11:09 编辑
由浏览器发起请求开始 知识点1: 浏览器与服务器软件架构:C/S架构 HTTP协议:又称超文本传输协议,它规定了浏览器与服务端数据传输的格式 HTTP协议四大特性: 基于TCP/IP作用于应用层的协议 基于请求响应 无状态 无连接 知识点2: 请求格式及响应格式: 请求格式: 请求首行 请求头 空行(\r\n) 请求体 响应格式: 响应首行 响应头 空行 响应体
wsgiref请求响应处理 知识点3:web服务网关协议 cgi:通用网关协议 wsgi协议: wsgi协议(Web Server Gateway Interface) 主要包含server和application两部分: WSGI协议其实是定义了一种server与application解耦的规范,我们django自带的wsgiref是对该协议的具体实现 此外还有很多其他实现该协议的服务器: uwsgi:支持较高并发,django项目上线一般会选择用它替换django自带的wsgiref == JAVA中的tomcat wsgiref:支持并发不高,django自带
请求解析完成后依次通过Django中间件 知识点4:django中间件 django自带七大中间件:可以简单理解为django的门户,安全认证及全局处理都在这里面 [Python] 纯文本查看 复制代码 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',
] 除了django自带的中间件以外我们还可以自定义中间件实现一些全局的校验和配置 方法:在应用下新建文件夹,名字自取,文件夹下新建任意py文件,名字自取,接下来就可以在py中定义自己的中间件 [Python] 纯文本查看 复制代码 # 导入MiddlewareMixin模块
from django.utils.deprecation import MiddlewareMixin
#定义中间件的类,它继承MiddlewareMixin
class Md1(MiddlewareMixin):
def process_request(self, request):
print('Md1里面的process_request')
class Md2(MiddlewareMixin):
def process_request(self, request):
print('Md2里面的process_request') django暴露给开发者5种方法分别是: [Python] 纯文本查看 复制代码 process_request(self, request): #请求来的时候执行
process_response(self, request, response): #响应返回时执行
process_template_response(self, request, response): #视图函数执行完了执行
process_view(self, request, view_func, view_args, view_kwargs): #路由匹配成功后视图函数执行前执行
process_exception(self, request, exception): #视图函数出错时执行 接下来进入urls.py,路由匹配 [Python] 纯文本查看 复制代码 urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$',views.home),
url(r'^test/$',views.test),
url(r'^testadd/$',views.testadd),
url(r'',views.error)
] 路由匹配成功,进入视图函数 路由层写法: [Python] 纯文本查看 复制代码 url(r'^test/$',views.test), 视图层写法: [Python] 纯文本查看 复制代码 def text(request):
if request.method == "POST":
return HttpResponse("ok")
elif request.method == "GET":
return HttpResponse("ok")
|