关于django的一些笔记和细节(关于请求的接收与响应方面的细节,后续要完善)
前言:本次只是简单记录一下关于django的请求的接收与响应的一些常见的知识点,后续再深入的探讨。
一:关于请求的接收:
1:django是一个程序默认开启了对8000端口的访问监听,任何请求访问这里都会进行判断,处理或拒绝
2:关于谁能请求:django的setting文件中,ALLOWED_HOSTS = []表示谁能访问,其他ip都会被拒绝。如果是
ALLOWED_HOSTS = ["*"]则代表任何人都可以访问。
3:关于路由:由这些东西掌控:setting文件中的ROOT_URLCONF = 'mysite.urls';容器应用中的:urls.py
文件;以及普通子应用中的urls.py文件。容器应用中的urls.py文件会通过include函数,将带有固定请求路由前
缀的路由转发到固定子应用。
4:关于中间件MIDDLEWARE。中间件的功能非常强大,可以用于请求的接收与响应。通过setting文件中的MIDDLEWARE进行设
置,不需要的中间件可以去掉,当然也可以自定义的。
5:关于接收get请求中的参数:当请求路由到你的函数是,会有一个request参数,通过这个参数可以取出来
eg:request.GET.get('id',default='110')
6:关于接收post请求中的参数:当请求路由到你的函数是,会有一个request参数,通过这个参数可以取出来
对了,关于接受请求,千万不要用request.POST 这样接受的数据,是有可能不全的,因为它指挥接受str类型的数
据,如果是list类型,则只会接收list中的最后一个值.
eg:requestDict = request.body
7:关于获取django中的请求头参数,因为django会在原来的http请求头的一些参数上加上http,所以这个要具体情况具体分析了。
使用META即可访问request中的请求头信息
eg: request.META.get(name)
如果你不会分析,那就直接获取META然后响应到前端直接查看复制就ok,工具的使用还是要思维灵活一点的.
二:关于请求的响应:
1:关于响应,你可以使用django自带的很多种响应类型。也可以自己封装适合自己的响应方式,但是一定要写好注释.
eg: JsonResponse;HttpResponse;FileResponse;StreamingHttpResponse
2: 关于设置响应体:
def detai1(request, question_id):
response = HttpResponse()
response['hhh'] = 'hhh'
response['Access-Control-Expose-Headers'] = "*"
response["Version"] = "2"
response["Version_old"] = "1"
return HttpResponse("You're looking at question %s." % question_id)
3: 也可以使用MIDDLEWARE对响应进行处理,
三: 如果只是简单的使用这些应该已经够了,代码确实是好写,但是出了问题一般人解决起来会很费力,大佬和咱们的差距不仅仅是写代码的差距, 最主要的是经验和思想,基础知识,思考方式的差距.另外,MIDDLEWARE的使用也是可以很巧妙的解决一些问题的.这个方式非常棒,在java方面的springWeb中也有体现…
四: 感叹:
1: 优秀的框架设计是真的是非常棒的,我也是最近才真正的体会到,因为工作中慢慢负责的代码重要了起来,不再是简
单的增删改查,所以这时候你负责的功能和代码会有一些特殊 当你去设计这些东西的时候,而这时候却没有响应的框
架为你服务,当你自己写代码的时候,你就会在一次次的碰壁中慢慢发现,设计模式,IOC,AOP代表着什么.哦~, 你会
现,这就是前人的智慧,巨人的肩膀. 是的最后的目的就是要让你在开发的时候更加灵活,考虑的事情更少,更加的易于
修改维护.代码的复用性高了,不需要再去重复的写同一段代码.
2: 其实我们需要学习的东西并不多,大学四件套就是: (再往后才是细分的东西,软件工程,C,java语言什么的)
1: 计算机组成原理;
2: 计算机网络;
3: 计算机编程设计;
4: 操作系统,
这四件套我认为是任何计算机专业的人都要熟知的,不管你是运维,前端,后端,测试还是其他.
同样,当你在拥有这些知识的时候,你再学习一些工具的时候会非常简单,这是必然的!!!
你可能觉得有的人学习东西特别快,不妨去想想他们为啥这样.
是不是有经验(积累,总结,并且思考)
思维能力(这是可以锻炼的)
基础知识(是可以学习的嘛.)
五: 关于django如何获取HTTP请求中的参数:
1: request.META.get("header key") 用于获取header的信息
2: 注意的是header key必须增加前缀HTTP,同时大写,例如你的key为username,那么应该写成:request.META.get("HTTP_USERNAME")
3: 另外就是当你的header key中带有中横线,那么自动会被转成下划线,例: User-Agent的写成: request.META.get("HTTP_USER_AGENT")
六: 关于django中间件
Django 中间件是修改 Django request 或者 response 对象的钩子,可以理解为是介于 HttpRequest 与 HttpResponse 处理之间的一道处理过程。
浏览器从请求到响应的过程中,Django 需要通过很多中间件来处理,可以看如下图所示:
Django 中间件作用:
修改请求,即传送到 view 中的 HttpRequest 对象。
修改响应,即 view 返回的 HttpResponse 对象。
中间件组件配置在 settings.py 文件的 MIDDLEWARE 选项列表中。
配置中的每个字符串选项都是一个类,也就是一个中间件。
Django 默认的中间件配置:
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',
]
自定义中间件:(有如下函数)(具体见菜鸟驿站)
process_request(self,request)
process_view(self, request, view_func, view_args, view_kwargs)
process_exception(self, request, exception)
process_response(self, request, response)