django本地部署,django开发的网页怎样部署
在本教程中,我们来学习Django的上下文处理器和中间件。
对于这两块内容,我们最好先理解概念和原理,才能更好的应用。
1.上下文处理器
上下文处理器也称为上下文呈现器。
个人认为处理比渲染更容易理解,英文中的“Processor”是处理的意思,“render”是渲染的意思。
但是称之为上下文渲染器也是有意义的。渲染更接近使用场景。
Django中的Context Processor主要用在模板中完成页面绘制的一些处理,也就是所谓的页面渲染。
还有,语境是什么?
这个概念很难理解。
从汉语的角度来说,语境就是语境;
同一句话,在不同的语境下,有不同的含义。
比如,亮亮学长考试考了100分,她爸爸说“干得好”,意思是表扬。
光明学长考试0分,父亲说“干得好”,讽刺。
所以,同样的一句话,我们需要和上面联系起来才能理解真正的意思。
从计算机编程的角度来看,语境就是环境。
也就是说,同一个处理程序,针对不同的环境,反馈不同的处理结果。
借用互联网上的一个例子:当用户访问一个网站时,网站的所有页面都应该能够显示用户自己的IP地址。
有了这样一个函数,我们需要从请求中获取访问用户的IP地址,然后呈现给页面。
你可能会想,我们可以在每个页面对应的视图功能中做到这一点,但是太麻烦了。
最好的方法是定义一次流程,这样就可以在每个页面中使用。
此时,我们可以通过定制上下文处理器来帮助我们做到这一点。
不同来源的用户使用相同的处理器在页面上呈现不同的IP地址。
1.创建上下文处理器。
在项目文件夹(即“wsgi.py”所在的位置)中创建一个新文件“context_processor.py”。
添加代码以获取该文件中用户的IP地址。
示例代码:
getuserip(request):IP=request . meta[ remote _ addr ]if IP== 127 . 0 . 0 . 1 :return { user _ type : local user } return { user _ type : external user(% s)% IP
2.将上下文处理器添加到模板设置中。
打开“settings.py”文件,在模板设置中添加处理器中的功能。
模板=[{.省略一些代码.选项:{ 上下文处理器:[.省略一些代码.
MyProject.context_processor.getuserip
],},]在上面的代码中,红色部分是新代码。3.在页面模板中添加标签。
!doctype HTML HTML lang= zh-cn head meta charaset= utf-8 title首页/title/headbody当前访问用户:
{{ user_type }}
/body/html完成上述代码后,Django会先通过上下文处理器对模板进行处理,并将处理后返回的数据字典调入模板,通过模板标签获取数据。此时,我们可以打开开发服务器进行访问测试。
注意:如果你需要允许外部访问,你需要监听所有的IP地址。服务器启动命令是:runserver 0.0.0:端口号,也可以缩写为runserver 0:端口号。
本地访问结果:
外部访问结果:(如手机)
第二,中间件
中间件,我们要搞清楚它是什么,起什么作用。
根据官方文档,中间件是请求和响应之间的挂钩框架。
.又一个钩子。
明白个人钩子其实是挂在主程序上的一个监控程序,当主程序运行中钩子的触发条件满足时,钩子处理程序被执行。
在官方文档中,给出的中间件例子非常简单直观,包含两种写法。
1.以函数的形式定义中间件。
示例代码:
def simple _ middleware(get _ response):#一次性配置和初始化。def中间件(请求):#在调用视图(以及后来的中间件)之前,为每个请求执行的#代码。response=get _ response(request)#调用视图后为每个请求/响应执行的代码。返回响应返回中间件2。以类的形式定义中间件。
class simple middleware:def _ _ init _ _(self,get _ response):self . get _ response=get _ response #一次性配置和初始化。def __call__(self,request): #在调用#视图(以及后来的中间件)之前,为每个请求执行的#代码。response=self . get _ response(request)#视图被调用后每个请求/响应要执行的代码. return response那么,如何使用中间件呢?能起到什么样的作用?
仍然以举例说明的方式。
比如我们公布的项目只允许本地和指定的ip访问,不允许其他地址的外部设备访问,所以可以通过中间件实现。
首先,创建一个中间件文件“middleware.py ”,定义带有访问限制的中间件。
这个文件可以存储在一个新的包中,例如:MW。
示例代码:
从django.http导入HttpResponseForbiddenclass AaccessRestrictionMiddleware:def _ _ init _ _(self,Get _ response): self。get _ response=get _ responseSelf。Wite _ ip=[127.0.0.1 , 192.168.31.18] #初始化ip地址白名单def __call__(self,Request):ip=Request . meta[ remote _ addr ]#如果IP不在self中,则获取IP。来访用户的wite _ IP:#如果IP不在白名单中,返回HttpResponseForbidden(禁止您访问!)# return response response=self . get _ response(request)return response然后,我们打开文件“settings.py”,在中间件设置中添加中间件的类。
示例代码:
中间件=[ MW . middleware . aaccessrestriction middleware ,省略其他中间件.]通过以上操作,我们可以限制只有IP白名单中的用户才能访问我们的项目。
中间件更像是游戏的外挂程序。一旦在游戏主程序执行过程中出现触发插件的情况,插件就会进行相应的处理。但是,插件不会改变主程序。当我们不需要插件的时候,只需要把插件程序去掉,主程序仍然可以正常执行。
本节练习源代码:[点击此处下载]
请注明:神奇Python Django 2:Web项目开发入门笔记(24)