当前位置: 首页 > news >正文

流行的网站建设技术有哪些网店怎么开的

流行的网站建设技术有哪些,网店怎么开的,产品开发流程文件,公司网站域名更改怎么做Django 中间件、缓存、信号 一、 Django 中间件 django 中的中间件#xff08;middleware#xff09;#xff0c;在django中#xff0c;中间件其实就是一个类#xff0c;在请求到来和结束后#xff0c;django会根据自己的规则在合适的时机执行中间件中相应的方法。 在d…Django  中间件、缓存、信号 一、 Django  中间件 django 中的中间件middleware在django中中间件其实就是一个类在请求到来和结束后django会根据自己的规则在合适的时机执行中间件中相应的方法。 在django项目的settings模块中有一个 MIDDLEWARE_CLASSES 变量其中每一个元素就是一个中间件 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, ] 1、中间件中可以定义四个方法 process_request(self,request) #每个进入view视图中请求都要经过这个函数 process_response(self, request, response) #每个从view视图中返回的response都会触发这个函数 process_view(self, request, callback, callback_args, callback_kwargs) #经过路由映射找到view中对应的方法后就会触发这个函数,找不到就不会触发 process_template_response(self,request,response) # 如果Views中的函数返回的对象中具有render方法这个函数才会执行 process_exception(self, request, exception) #如果对应的视图中的函数出现异常这个函数才会执行2、自定义中间件 与mange.py在同一层级下新建目录Middle在Middle新建m1.py文件名称随意 1、在m1.py中定义三个中间件 class Foo:# render 方法用来触发process_template_response函数def render(self):return HttpResponse(template_response)def test(request):print(穷)return Foo() views.py from django.utils.deprecation import MiddlewareMixin # 自定义中间件都需要继承这个类# 定义中间件Row1 class Row1(MiddlewareMixin):def process_request(self,request): # 所有经过中间件Row1的request都会打印001print(request——001)# request这个参数是请求的request, view_func指定的视图中对应的函数, view_func_args路由系统中的位置参数, view_func_kwargs路由系统中的关键字参数def process_view(self, request, view_func, view_func_args, view_func_kwargs):print(view1)def process_response(self, request, response): # 所有经过中间件Row1的response 都会打印001print(response——001)return responsefrom django.shortcuts import HttpResponse# 定义中间件Row2 class Row2(MiddlewareMixin):def process_request(self,request):print(request——002)# 如果不想让request进入view视图函数中可以在自定义中间件中直接return返回。# 终止之后就不会经过row3的response会直接从row2 response返回, 这个特性是1.7之后才有的。1.7以前会经过row3的response之后再进行返回。# return HttpResponse(终止)def process_view(self, request, view_func, view_func_args, view_func_kwargs):print(view2)def process_response(self, request, response):print(response——002)return response# 定义中间件Row3 class Row3(MiddlewareMixin):def process_request(self,request):print(request——003)def process_view(self, request, view_func, view_func_args, view_func_kwargs):print(view2)def process_response(self, request, response):print(response——003)return response# 这个函数的触发条件就是如果对应的视图中的函数出现异常这个函数才会执行def process_exception(self, request, exception):if isinstance(exception,ValueError):return HttpResponse(出现异常》。。)# 如果Views中的函数返回的对象中具有render方法这个函数才会执行像redirect,HttpResponse 都不会触犯这个函数def process_template_response(self,request,response):print(-----------------------)return response 2、注册中间件 在settings文件中的MIDDLEWARE注册刚刚定义的三个中间件 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,Middle.m1.Row1,Middle.m1.Row2,Middle.m1.Row3, ]3、中间件request、response状态流程示意图     二、Django  缓存 由于Django是动态网站所有每次请求均会去数据进行相应的操作当程序访问量大时耗时必然会更加明显最简单解决方式是使用缓存缓存将一个某个views的返回值保存至内存或者memcache中5分钟内再有人来访问时则不再去执行view中的操作而是直接从内存或者Redis中之前缓存的内容拿到并返回Django是目前仅有自带缓存的框架。 Django中提供了7种缓存方式 开发调试内存文件数据库Memcache缓存python-memcached模块Memcache缓存pylibmc模块Redis缓存一、缓存配置方式 1、配置 a、开发调试 # 此为开始调试用实际内部不做任何操作# 配置CACHES {default: {BACKEND: django.core.cache.backends.dummy.DummyCache, # 引擎TIMEOUT: 300, # 缓存超时时间默认300None表示永不过期0表示立即过期OPTIONS:{MAX_ENTRIES: 300, # 最大缓存个数默认300CULL_FREQUENCY: 3, # 缓存到达最大个数之后剔除缓存个数的比例即1/CULL_FREQUENCY默认3},KEY_PREFIX: , # 缓存key的前缀默认空VERSION: 1, # 缓存key的版本默认1KEY_FUNCTION 函数名 # 生成key的函数默认函数会生成为【前缀:版本:key】}}# 自定义keydef default_key_func(key, key_prefix, version):Default function to generate keys.Constructs the key used by all other methods. By default it prependsthe key_prefix. KEY_FUNCTION can be used to specify an alternatefunction with custom key making behavior.return %s:%s:%s % (key_prefix, version, key)def get_key_func(key_func):Function to decide which key function to use.Defaults to default_key_func.if key_func is not None:if callable(key_func):return key_funcelse:return import_string(key_func)return default_key_func View Code b、内存 # 此缓存将内容保存至内存的变量中# 配置CACHES {default: {BACKEND: django.core.cache.backends.locmem.LocMemCache,LOCATION: unique-snowflake, #变量值要唯一}}# 注其他配置同开发调试版本 View Code c、文件 # 此缓存将内容保存至文件# 配置 CACHES {default: {BACKEND: django.core.cache.backends.filebased.FileBasedCache,LOCATION: /var/tmp/django_cache,}}# 注其他配置同开发调试版本 View Code d、数据库 # 此缓存将内容保存至数据库# 配置CACHES {default: {BACKEND: django.core.cache.backends.db.DatabaseCache,LOCATION: my_cache_table, # 数据库表}}# 注执行创建表命令 python manage.py createcachetable View Code e、Memcache缓存python-memcached模块 # 此缓存使用python-memcached模块连接memcache CACHES {default: {BACKEND: django.core.cache.backends.memcached.MemcachedCache,LOCATION: 127.0.0.1:11211,}}CACHES {default: {BACKEND: django.core.cache.backends.memcached.MemcachedCache,LOCATION: unix:/tmp/memcached.sock,}} CACHES {default: {BACKEND: django.core.cache.backends.memcached.MemcachedCache,LOCATION: [172.19.26.240:11211,172.19.26.242:11211,]}} View Code f、Memcache缓存pylibmc模块 # 此缓存使用pylibmc模块连接memcacheCACHES {default: {BACKEND: django.core.cache.backends.memcached.PyLibMCCache,LOCATION: 127.0.0.1:11211,}}CACHES {default: {BACKEND: django.core.cache.backends.memcached.PyLibMCCache,LOCATION: /tmp/memcached.sock,}} CACHES {default: {BACKEND: django.core.cache.backends.memcached.PyLibMCCache,LOCATION: [172.19.26.240:11211,172.19.26.242:11211,]}} View Code g. Redis缓存依赖pip3 install django-redis CACHES {default: {BACKEND: django_redis.cache.RedisCache,LOCATION: redis://127.0.0.1:6379,OPTIONS: {CLIENT_CLASS: django_redis.client.DefaultClient,CONNECTION_POOL_KWARGS: {max_connections: 100}# PASSWORD: 密码,}} } View Code from django_redis import get_redis_connection conn get_redis_connection(default) 视图种连接并操作 2、缓存的三种方式 使用中间件经过一系列的认证等操作如果内容在缓存中存在则使用FetchFromCacheMiddleware获取内容并返回给用户当返回给用户之前判断缓存中是否已经存在如果不存在则UpdateCacheMiddleware会将缓存保存至缓存从而实现全站缓存MIDDLEWARE [django.middleware.cache.UpdateCacheMiddleware, #这个要设置在最上层经过所有中间件的response认证之后再把缓存内容返回给用户# 其他中间件...django.middleware.cache.FetchFromCacheMiddleware, #这个中间件要设置在所有中间件最下层,比如如果设置CSRF中间件前request请求不用通过csrf认证就能拿到返回]CACHE_MIDDLEWARE_ALIAS CACHE_MIDDLEWARE_SECONDS CACHE_MIDDLEWARE_KEY_PREFIX 全局设置缓存 方式一from django.views.decorators.cache import cache_pagecache_page(60 * 15) #通过装饰器单位是秒def my_view(request):...方式二from django.views.decorators.cache import cache_pageurlpatterns [url(r^foo/([0-9]{1,2})/$, cache_page(60 * 15)(my_view)),] 单独视图缓存 a. 引入TemplateTag{% load cache %}b. 使用缓存{% cache 5000 缓存key %} # 时间以秒为单位缓存key自定义缓存内容{% endcache %} 单独模板缓存 三种缓存方式的优先级如果三种缓存方式同时存在的话全局设置缓存单独视图缓存单独模板缓存, 优先级跟请求生命周期有关 3、文件缓存示例 a、settings.py中配置 CACHES {default: {BACKEND: django.core.cache.backends.filebased.FileBasedCache,LOCATION: os.path.join(BASE_DIR,cache) #cache文件的保存路径} } b、templates下的html文本 {% load cache %} #导入缓存模块 !DOCTYPE html html langen headmeta charsetUTF-8title/title /head bodyh1{{ ctime }}/h1h1{{ ctime }}/h1{% cache 10 k1 %} #缓存10秒h1{{ ctime }}/h1{% endcache %} /body /html cache.html c、views.py中的函数 from django.views.decorators.cache import cache_pagecache_page(10) #缓存10秒 def cache(request):import timectime time.time()return render(request, cache.html, {ctime: ctime})  更多Django缓存内容点击   三、Django 信号 Django中提供了“信号调度”用于在框架执行操作时解耦。通俗来讲就是一些动作发生的时候信号允许特定的发送者去提醒一些接受者。 1、Django内置信号 Model signalspre_init # django的modal执行其构造方法前自动触发post_init # django的modal执行其构造方法后自动触发pre_save # django的modal对象保存前自动触发post_save # django的modal对象保存后自动触发pre_delete # django的modal对象删除前自动触发post_delete # django的modal对象删除后自动触发m2m_changed # django的modal中使用m2m字段操作第三张表add,remove,clear前后自动触发class_prepared # 程序启动时检测已注册的app中modal类对于每一个类自动触发 Management signalspre_migrate # 执行migrate命令前自动触发post_migrate # 执行migrate命令后自动触发 Request/response signalsrequest_started # 请求到来前自动触发request_finished # 请求结束后自动触发got_request_exception # 请求异常后自动触发 Test signalssetting_changed # 使用test测试修改配置文件时自动触发template_rendered # 使用test测试渲染模板时自动触发 Database Wrappersconnection_created # 创建数据库连接时自动触发内置信号的触发示例 a.创建信号触发方式 在manage.py同级目录下创建sg.py文件路径可自定义 # Django 所有内置函数的导入方式 from django.core.signals import request_finished from django.core.signals import request_started from django.core.signals import got_request_exceptionfrom django.db.models.signals import class_prepared from django.db.models.signals import pre_init, post_init from django.db.models.signals import pre_save, post_save from django.db.models.signals import pre_delete, post_delete from django.db.models.signals import m2m_changed from django.db.models.signals import pre_migrate, post_migratefrom django.test.signals import setting_changed from django.test.signals import template_renderedfrom django.db.backends.signals import connection_created# 自定义一个函数 def f1(sender, **kwargs): print(hello)# print(sender,kwargs)# 内置信号关联触发函数 pre_save.connect(f1) b.让view中的函数触发信号 需要在与工程同名的目录下的__init__.py文件中导入刚刚创建的sg.py文件 import sg c 、view.py中进行save操作 def signal(reuqest):from app01 import modelsobj models.UserInf(userroot)print(start)obj.save()obj models.UserInf(userroot)obj.save()obj models.UserInf(userroot)obj.save()在每个save操作后信号都会触发一次触发函数打印一次hello # 输出 start hello hello hello 2、自定义信号 a.sg.py中自定义信号 import django.dispatch # 导入自定义信号类# pizza_done 信号名可以自定义 providing_args[toppings, size] 这个设置的是pizza_done信号的触发条件 pizza_done django.dispatch.Signal(providing_args[toppings, size])def f2(sender, **kwargs):print(f2_callback)print(sender, kwargs)# 自定义信号关联触发函数 pizza_done.connect(f2) b.__init__.py文件 import sg c 、view.py文件 from sg import pizza_done #导入自定义信号pizza_done.send(senderkkk,toppings123, size456) #sender 名字自定义 return HttpResponse(ok)转载于:https://www.cnblogs.com/Keep-Ambition/p/8900453.html
http://www.yutouwan.com/news/114768/

相关文章:

  • 怎么用vs2010做网站设计安阳吧百度贴吧
  • 博客论坛网站开发建网站几个按钮
  • 深圳seo网站推广报价网页制作的内容
  • 沈阳市网站建设慢慢来做网站多少钱
  • 网站设计模板含数据库防封域名
  • 农家乐网站源代码wordpress下载付费
  • 阳春做网站网站开发电脑内存要多少
  • 网站开发ceac证网站设计抄袭
  • 网络网站公司废品回收在哪个网站做效果好
  • 做网站发违规内容 网警抓不抓国外网站阻止国内访问怎么做
  • 微信微网站怎么做鸿蒙最新版本
  • 网站怎么做地区屏蔽js北京网络网站建设价格
  • 百度网站排名抓取规则厦门行业网站建设
  • 企业门户网站开发任务书佛山 品牌设计
  • 怎么在手机上制作网站吗零售空间设计公司
  • 合肥市网站制作网页访问紧急升级
  • 关于建设教体局网站的申请网站开发的软 硬件环境标准
  • 渠道建设网站怎么当网站站长
  • 网站设计教科书东莞市网上注册公司流程
  • 做旅游攻略去什么网站好移动卡套餐
  • 网站建设需要多少钱小江专业做网站公司排名
  • 电商网站设计的准则是什么佛山网警
  • 建设手表商城网站多少钱北京文化馆设计公司哪种
  • 淘客个人网站怎么建设定制头像软件
  • 企业网站建立平台浅析小型企业网站的建设
  • 淘宝网站的论坛做的怎么样企业官网网站
  • 正规外贸网站建设公司网站的构成要素
  • 佛山优化企业网站排名平台我国数字经济报告
  • wap网站微信一键登录浦东新区专业做网站
  • 温州论坛吧海阳seo排名