django本地部署,django开发的网页怎样部署

  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)

django本地部署,django开发的网页怎样部署